ALGOR 1.0.0.0
Бібліотека для обробки та сортування структур даних
Простір імен ALGOR

Глобальний простір імен усього проекту Детальніше...

Простори імен

namespace  EXCEPTION_SET
 Простір імен, що реалізовує виключення
 
namespace  RANDOM
 Простір імен, що реалізовує ГПВЧ
 

Класи

struct  Array
 Структура, що імітує масив Детальніше...
 
class  ArrayBase
 Базовий клас, від якого успадковуються інші класи, пов'язані з роботою з масивами Детальніше...
 
class  ARRAYDATA
 Клас з потужним функціоналом обробки масивів Детальніше...
 
class  ArrayProcessing
 Класс базових функцій для роботи з масивами Детальніше...
 
class  Comparative_Sorts
 Клас з великою кількістю алгоритмів сортувань Детальніше...
 
class  Distribution_Sorts
 Клас із потужними алгоритмами сортувань Детальніше...
 
interface  Printer
 Printer-інтерфейс, призначений для реалізації функціоналу виводу інформації Детальніше...
 

Визначення типів

using byte1_t = char
 Аліас для char (1 байт). Детальніше...
 
using byte2_t = short
 Аліас для short (2 байти). Детальніше...
 
using byte4_t = long
 Аліас для long (4 байти). Детальніше...
 
using byte8_t = long long
 Аліас для long long (8 байтів). Детальніше...
 
using sbit8_t = signed char
 Аліас для signed char (1 байт). Детальніше...
 
using sbit16_t = signed short
 Аліас для signed short (2 байти). Детальніше...
 
using sbit32_t = signed long
 Аліас для signed long (4 байти). Детальніше...
 
using sbit64_t = signed long long
 Аліас для signed long long (8 байтів). Детальніше...
 
using ubit8_t = unsigned char
 Аліас для unsigned char (1 байт). Детальніше...
 
using ubit16_t = unsigned short
 Аліас для unsigned short (2 байти). Детальніше...
 
using ubit32_t = unsigned long
 Аліас для unsigned long (4 байти). Детальніше...
 
using ubit64_t = unsigned long long
 Аліас для unsigned long long (8 байтів). Детальніше...
 
using fbit32_t = float
 Аліас для float (4 байти). Детальніше...
 
using fbit64_t = double
 Аліас для double (8 байтів). Детальніше...
 
using fbit128_t = long double
 Аліас для long double (16 байт). Детальніше...
 
using asize_t = ubit32_t
 Псевдонім для визначення типу "розмір массиву". Детальніше...
 
using memcell_t = ubit64_t
 Псевдонім для обчислюваної комірки пам'яті. Детальніше...
 

Функції

template<typename type_value >
void swap (type_value &firstNumber, type_value &secondNumber) noexcept
 Міняє місцями два елементи Детальніше...
 
template<typename type_value >
type_value minimum (type_value firstNumber, type_value secondNumber) noexcept
 Шукає найменше значення з двух наданих Детальніше...
 
template<typename type_value >
type_value maximum (type_value firstNumber, type_value secondNumber) noexcept
 Шукає найбільше значення з двух наданих Детальніше...
 
memcell_t getMemoryCell (memcell_t right_adjust=0, memcell_t left_adjust=0)
 Повертає випадкове число; аналог time(NULL) Детальніше...
 
template<typename type_array >
Array< type_array > * create_struct (const asize_t &SIZE, bool mem_allocation=true)
 Створює структуру з покажчиком на масив Детальніше...
 
template<typename type_array >
void generate_struct (Array< type_array > *&Array, const sbit64_t &min_limit, const sbit64_t &max_limit, const ubit64_t seed=getMemoryCell(32), const ubit32_t denominator=1)
 Генерує випадкові значення у структурі масиву Детальніше...
 
template<typename type_array >
void remove_struct (Array< type_array > *&Array)
 remove_struct Детальніше...
 

Детальний опис

Глобальний простір імен усього проекту

Призначений для зберігання усього реалізованого функціоналу проекту.

Нотатки
Краще не використовувати разом з std, інакше можуть виникнути конфлікти.
Починаючи з
v0.1.2.0 commit 2fa93b
Автор
Калиновський Валентин
Версія
1.0.0.0
Необхідно зробити:

Реалізувати розділ ALGOR_MATRIX

Реалізувати розділ ALGOR_HEAP

Реалізувати розділ ALGOR_LIST

Опис визначень типів

◆ byte1_t

Аліас для char (1 байт).

Зазвичай використовується для задання типу строк. Може зберігати число від 0 до 255, або від -128 до +127.

Починаючи з
v0.1.3.0 commit b50b4a
Увага
Якщо цей тип дійсно використовується для строк, то не забувайте вказувати "*" (вказівник) перед назвою імені строки, так як цей тип не замінює повністю char на string. Це лише звичайний аліас.

Див. визначення в файлі ALGOR.hpp, рядок 56

◆ byte2_t

Аліас для short (2 байти).

Зазвичай використовується при зберіганні коротких чисел від 0 до 65'535, або від -32'768 до +32'767.

Починаючи з
v0.1.3.0 commit b50b4a

Див. визначення в файлі ALGOR.hpp, рядок 57

◆ byte4_t

Аліас для long (4 байти).

Зазвичай використовується при зберіганні чисел. Може зберігати від 0 до 4'294'967'295, або від -2'147'483'648 до +2'147'483'647.

Починаючи з
v0.1.3.0 commit b50b4a
Нотатки
Також ним можна повноцінно замінити тип int, так як він теж розрахований на 4 байти. Але якщо програму запустити на комп'ютері з процесором intel i386 чи більш ранішим, то під int буде виділятися усього 2 байти і на тих процесорах int є аліасом для short. Через таке розпливчате поняття типу int він ніде у бібліотеці не використовується, а використовуються чіткі типи типу short чи long.

Див. визначення в файлі ALGOR.hpp, рядок 58

◆ byte8_t

Аліас для long long (8 байтів).

Є розширенням типу long у два рази і розрахований під числа від 0 до 18'446'744'073'709'551'615, або від -9'223'372'036'854'775'808 до +9'223'372'036'854'775'807.

Починаючи з
v0.1.3.0 commit b50b4a

Див. визначення в файлі ALGOR.hpp, рядок 59

◆ sbit8_t

Аліас для signed char (1 байт).

Аналогічно звичайному char, але може приймати значення тільки від -128 до +127.

Починаючи з
v0.1.0.0 commit 0d3195

Див. визначення в файлі ALGOR.hpp, рядок 61

◆ sbit16_t

Аліас для signed short (2 байти).

Аналогічно звичайному short, але може приймати значення тільки від -32'768 до +32'767.

Починаючи з
v0.1.0.0 commit 0d3195

Див. визначення в файлі ALGOR.hpp, рядок 62

◆ sbit32_t

Аліас для signed long (4 байти).

Аналогічно звичайному long, але може приймати значення тільки від -2'147'483'648 до +2'147'483'647.

Починаючи з
v0.1.0.0 commit 0d3195

Див. визначення в файлі ALGOR.hpp, рядок 63

◆ sbit64_t

Аліас для signed long long (8 байтів).

Аналогічно звичайному long long, але може приймати значення тільки від -9'223'372'036'854'775'808 до +9'223'372'036'854'775'807.

Починаючи з
v0.1.0.0 commit 0d3195

Див. визначення в файлі ALGOR.hpp, рядок 64

◆ ubit8_t

Аліас для unsigned char (1 байт).

Аналогічно звичайному char і на відміну від signed char може приймати значення тільки від 0 до 255.

Починаючи з
v0.1.0.0 commit 0d3195

Див. визначення в файлі ALGOR.hpp, рядок 66

◆ ubit16_t

Аліас для unsigned short (2 байти).

Аналогічно звичайному short і на відміну від signed short може приймати значення тільки від 0 до 65'535.

Починаючи з
v0.1.0.0 commit 0d3195

Див. визначення в файлі ALGOR.hpp, рядок 67

◆ ubit32_t

Аліас для unsigned long (4 байти).

Аналогічно звичайному long і на відміну від signed long може приймати значення тільки від 0 до 4'294'967'295.

Починаючи з
v0.1.0.0 commit 0d3195

Див. визначення в файлі ALGOR.hpp, рядок 68

◆ ubit64_t

Аліас для unsigned long long (8 байтів).

Аналогічно звичайному long long і на відміну від signed long long може приймати значення тільки від 0 до 18'446'744'073'709'551'615.

Починаючи з
v0.1.0.0 commit 0d3195

Див. визначення в файлі ALGOR.hpp, рядок 69

◆ fbit32_t

Аліас для float (4 байти).

На відміну від всіх попередніх типів, що можуть зберігати тільки цілі числа, тип float може зберігати числа з плаваючою комою. У комірку можна записати як додатні, так і від'ємні числа. Можливий діапазон зберігаємих чисел від +/-3.4E-38 до 3.4E+38.

Починаючи з
v0.1.2.0 commit 1981d6

Див. визначення в файлі ALGOR.hpp, рядок 71

◆ fbit64_t

Аліас для double (8 байтів).

Розширює тип float, збільшуючи точність та розмір у два рази. Можливий діапазон зберігаємих чисел від +/-1.7E-308 до 1.7E+308.

Починаючи з
v0.1.2.0 commit 1981d6

Див. визначення в файлі ALGOR.hpp, рядок 72

◆ fbit128_t

Аліас для long double (16 байт).

Розширює тип double, збільшуючи точність та розмір іще у два рази.

Починаючи з
v0.1.3.0 commit b6349a

Див. визначення в файлі ALGOR.hpp, рядок 73

◆ asize_t

Псевдонім для визначення типу "розмір массиву".

Зазвичай цей тип використовується, коли треба вказати розмір масиву чи позицію у масиві. Так як нумерація починається з 0 і не існує від'ємних розмірів масивів чи номерів позицій, можна поточнити тип з int до unsigned int. До того ж не завжди вистачає 65'535 комірок масиву. Іноді потрібно більше, наприклад, мільйон чи мільярд. Більше мільярда нема сенсу створювати структури даних тому ідеальним вибором серед short, long та long long є long. Саме тому asize_t є аліасом до ALGOR::ubit32_t.

Починаючи з
v0.1.0.0 commit 89658e

Див. визначення в файлі ALGOR.hpp, рядок 75

◆ memcell_t

Псевдонім для обчислюваної комірки пам'яті.

Використовується тільки у функції ALGOR::getMemoryCell, як тип комірки, що зберігає розраховане число.

Починаючи з
v0.1.1.3 commit b4cdc9
Увага
Є службовим типом і замість нього краще використовувати ALGOR::ubit64_t.

Див. визначення в файлі ALGOR.hpp, рядок 76

Опис функцій

◆ swap()

template<typename type_value >
ALGOR::swap ( type_value &  firstNumber,
type_value &  secondNumber 
)
noexcept

Міняє місцями два елементи

Функція приймає два значення, які треба замінити місцями. Після виконання функції перша комірка пам'яті буде зберігати друге значення, а друга - перше. Для виконання алгоритму використовується додаткова комірка пам'яті.

Параметри шаблона
type_valueТип елементів, що міняються місцями
Аргументи
[in,out]firstNumberПерший елемент для заміни
[in,out]secondNumberДругий елемент для заміни
Починаючи з
v0.0.0.1
Тест:
ALGOR::swap<long>(value1, value2);
std::cout << value2 << "\n";
// >print:> 5

Див. визначення в файлі ALGOR_CORE.cpp, рядок 26

27{
28 type_value temp = firstNumber;
29 firstNumber = secondNumber;
30 secondNumber = temp;
31}

Вживається в ALGOR::RANDOM::RC4::crypto_rand(), ALGOR::RANDOM::RC4::crypto_srand() і ALGOR::ARRAYDATA< type_array >::reverse().

+ Граф викликів для цієї функції:

◆ minimum()

template<typename type_value >
ALGOR::minimum ( type_value  firstNumber,
type_value  secondNumber 
)
noexcept

Шукає найменше значення з двух наданих

Функція приймає два значення і порівнює їх. Якщо перше число виявится меншим за друге - функція повертає перше число, інакше - друге.

Параметри шаблона
type_valueТип елементів, з яких вибирається найменше значення
Аргументи
[in]firstNumberПерше значення на вибірку
[in]secondNumberДруге значення на вибірку
Починаючи з
v0.1.1.4 commit 090b06
Повертає
найменше значення з двух наданих
Див. також
ALGOR::maximum(type_value, type_value)
Тест:
std::cout << ALGOR::minimum<long>(value1, value2) << "\n";
// >print:> 5

Див. визначення в файлі ALGOR_CORE.cpp, рядок 34

35{
36 return firstNumber < secondNumber ? firstNumber : secondNumber;
37}

Вживається в ALGOR::ARRAYDATA< type_array >::resize().

+ Граф викликів для цієї функції:

◆ maximum()

template<typename type_value >
ALGOR::maximum ( type_value  firstNumber,
type_value  secondNumber 
)
noexcept

Шукає найбільше значення з двух наданих

Функція приймає два значення і порівнює їх. Якщо перше число виявится більшим за друге - функція повертає перше число, інакше - друге.

Параметри шаблона
type_valueТип елементів, з яких вибирається найбільше значення
Аргументи
[in]firstNumberПерше значення на вибірку
[in]secondNumberДруге значення на вибірку
Починаючи з
v0.1.1.4 commit 090b06
Повертає
найбільше значення з двух наданих
Див. також
ALGOR::minimum(type_value, type_value)
Тест:
std::cout << ALGOR::maximum<long>(value1, value2) << "\n";
// >print:> 10

Див. визначення в файлі ALGOR_CORE.cpp, рядок 40

41{
42 return firstNumber > secondNumber ? firstNumber : secondNumber;
43}

◆ getMemoryCell()

ALGOR::getMemoryCell ( memcell_t  right_adjust = 0,
memcell_t  left_adjust = 0 
)

Повертає випадкове число; аналог time(NULL)

Цей метод виділяє пам'ять під 10 комірок пам'яті. Куди саме система виділить пам'ять передгадати неможливо, а також неможливо передгадати, яка програма і які данні раніше сюди записувала, тому це самий реальний генератор випадкович чисел. Поки генерація масивів не була доведена до ідеалу, але як генератор великого числа замість time(NULL) цілком реально використати. Із десяти випадкових чисел функція розраховує число, яке треба повернути.

Прим.
Функції можна задати бітовий здвиг. Якщо функція використовується замість time(NULL), а результат передається у іншу функцію, що приймає тільки чотири-байтове значення, можна задати правий здвиг на 32 біти (4 байти) і тоді функція поверне 4 старших байти.
Аргументи
[in]right_adjustПравий здвиг
[in]left_adjustЛівий здвиг
Починаючи з
v0.1.1.3 commit b4cdc9
Значення, що повертаються
cell- розраховане випадкове число
Тест:
std::cout << ALGOR::getMemoryCell() << "\n";
// >print:> 185214324139604
memcell_t getMemoryCell(memcell_t right_adjust=0, memcell_t left_adjust=0)
Повертає випадкове число; аналог time(NULL)
Definition: ALGOR_CORE.cpp:45
Приклади
Algor_ArrayProcessing.cpp, Algor_core.cpp і Algor_random.cpp.

Див. визначення в файлі ALGOR_CORE.cpp, рядок 45

46{
47 memcell_t *cells = new memcell_t[10];
48 memcell_t cell = cells[0];
49 for (ubit32_t i = 1; i < 8; i++)
50 {
51 cell >>= (memcell_t)cells[i];
52 cell <<= (memcell_t)cells[i + 1];
53 cell ^= (memcell_t)cells[i + 2];
54 if (right_adjust != 0)
55 {
56 cell >>= right_adjust;
57 }
58 if (left_adjust != 0)
59 {
60 cell <<= left_adjust;
61 }
62 }
63 delete[] cells;
64 return cell;
65}
unsigned long ubit32_t
Аліас для unsigned long (4 байти).
Definition: ALGOR.hpp:68
ubit64_t memcell_t
Псевдонім для обчислюваної комірки пам'яті.
Definition: ALGOR.hpp:76

Вживається в ALGOR::RANDOM::test_random_on_Pearsons_coefficient().

+ Граф викликів для цієї функції:

◆ create_struct()

template<typename type_array >
ALGOR::create_struct ( const asize_t SIZE,
bool  mem_allocation = true 
)

Створює структуру з покажчиком на масив

Зберігає розмір масиву, виділяє пам'ять під цей самий масив та повертає вказівник на структуру масиву.

Обробка виняткових ситуацій
ALGOR::EXCEPTION_SET::void_data
Параметри шаблона
type_arrayТип елементів, що будуть зберігатися у масиві
Аргументи
[in]SIZEРозмір створюваного масиву
[in]mem_allocationЛогічний флаг, чи потрібно виділяти пам'ять під масив
Значення, що повертаються
Array<type_array>*- вказівник на створену структуру
Починаючи з
v0.1.0.0 commit 85698d
Прим.
Якщо ви вже виділили пам'ять під масив, то структурі не потрібно повторно виділяти пам'ять. Структура лише зберігає розмір масиву та сам вказівник на цей масив. Тому у цьому випадку флагу mem_allocation потрібно передати false і після цього зберегти вказівник на масив у структурі. У інших випадках флаг mem_allocation краще не змінювати.
Тест:
try
{
arr = ALGOR::create_struct<long>(10);
}
{
std::cout << "\n\nCode: " << ex.code() << ";\n" << ex.what() << "\n-> " << ex.why() << "\n\n";
}
// The data is not taken from the output, but from the debugger console
// arr = @0x1a1700
Клас-каркас для роботи з винятками
Definition: ALGOR.hpp:126
const byte1_t * what()
Метод, що повідомляє деталі винятку
ubit16_t code()
Метод, що повідомляє номер винятку
const byte1_t * why()
Метод, що дає пояснення винятку

Див. визначення в файлі ALGOR_CORE.cpp, рядок 68

70{
71 if (SIZE == 0)
72 {
74 }
76 ARRAY->array_size = SIZE;
77 if (mem_allocation)
78 {
79 ARRAY->array = new type_array[SIZE];
80 }
81 return ARRAY;
82}
Клас-виняток "void_data"
Definition: ALGOR.hpp:186
Структура, що імітує масив
Definition: ALGOR.hpp:91
asize_t array_size
Розмір масиву
Definition: ALGOR.hpp:93
type_array * array
Вказівник на масив
Definition: ALGOR.hpp:92

Використовує ALGOR::Array< type_array >::array і ALGOR::Array< type_array >::array_size.

◆ generate_struct()

template<typename type_array >
ALGOR::generate_struct ( Array< type_array > *&  Array,
const sbit64_t min_limit,
const sbit64_t max_limit,
const ubit64_t  seed = getMemoryCell(32),
const ubit32_t  denominator = 1 
)

Генерує випадкові значення у структурі масиву

Генерує у структурі масиву значення із заданого діапазону. Якщо задати denominator, то можна отримати кратні, чи дрібні значення данних.

Обробка виняткових ситуацій
ALGOR::EXCEPTION_SET::division_by_zero
Параметри шаблона
type_arrayВказує якого типу будуть генеруватися числа у структурі масиву
Аргументи
[in,out]ArrayСтруктура масиву, у якій потрібно згенерувати данні
[in]min_limitМінімально можливе згенероване значення
[in]max_limitМаксимально можливе згенероване значення
[in]seedСі́м'я генератору
[in]denominatorДільник для генерації float данних
Починаючи з
v0.0.0.1
Нотатки
На випадок, якщо не працює ALGOR::getMemoryCell, можна власноруч задати сі́м'я генерації.
Тест:
try
{
ALGOR::generate_struct<long>(arr, 1, 12);
}
{
std::cout << "\n\nCode: " << ex.code() << ";\n" << ex.what() << "\n-> " << ex.why() << "\n\n";
}
// The data is not taken from the output, but from the debugger console
// arr->array = {9 9 7 7 4 7 2 7 2 9}

Див. визначення в файлі ALGOR_CORE.cpp, рядок 85

90{
91 if (denominator == 0)
92 {
93 throw EXCEPTION_SET::division_by_zero("The Denominator variable is designed to convert the generated integer into a"
94 "fractional number or find its part. It's a divisor, so it can't be zero!");
95 }
96 RANDOM::LCM RanGen(seed);
97 for (asize_t i = 0; i < Array->array_size; i++)
98 {
99 Array->array[i] = (min_limit + (RanGen.rand() % (max_limit - min_limit))) / (fbit32_t)denominator;
100 }
101}
Клас-виняток "division_by_zero"
Definition: ALGOR.hpp:158
ГПВЧ Лінійний Конґруентний Метод
Definition: ALGOR.hpp:213
ubit32_t asize_t
Псевдонім для визначення типу "розмір массиву".
Definition: ALGOR.hpp:75
float fbit32_t
Аліас для float (4 байти).
Definition: ALGOR.hpp:71

Використовує ALGOR::Array< type_array >::array, ALGOR::Array< type_array >::array_size і ALGOR::RANDOM::LCM::rand().

+ Граф всіх викликів цієї функції:

◆ remove_struct()

template<typename type_array >
ALGOR::remove_struct ( Array< type_array > *&  Array)

remove_struct

Звільняє пам'ять від масиву, що зберігається у структурі й звільняє з пам'яті саму структуру.

Обробка виняткових ситуацій
ALGOR::EXCEPTION_SET::void_data
Параметри шаблона
type_arrayТип елементів, що зберігаються у масиві
Аргументи
[in,out]ArrayМасив, який потрібно видалити
Повертає
Вказівник на структуру після виклику цієї функції буде вказувати на nullptr.
Починаючи з
v0.1.0.0 commit 48aa64
Тест:
try
{
ALGOR::remove_struct<long>(arr);
}
{
std::cout << "\n\nCode: " << ex.code() << ";\n" << ex.what() << "\n-> " << ex.why() << "\n\n";
}
// The data is not taken from the output, but from the debugger console
// arr = 0x0

Див. визначення в файлі ALGOR_CORE.cpp, рядок 104

105{
106 if (Array == nullptr || Array->array == nullptr)
107 {
109 }
110 delete[] Array->array;
111 delete (Array);
112 Array = nullptr;
113}

Використовує ALGOR::Array< type_array >::array.