From 9f1ae76d1e8d6e785836bf6b41b01135ad589209 Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 29 Mar 2022 12:39:37 +0300 Subject: [PATCH] PIVector doc --- doc/images/pivector_begin.png | Bin 0 -> 4238 bytes doc/images/pivector_rbegin.png | Bin 0 -> 16863 bytes libs/main/containers/pivector.h | 255 ++++++++++++++++++++------------ main.cpp | 32 +--- 4 files changed, 171 insertions(+), 116 deletions(-) create mode 100644 doc/images/pivector_begin.png create mode 100644 doc/images/pivector_rbegin.png diff --git a/doc/images/pivector_begin.png b/doc/images/pivector_begin.png new file mode 100644 index 0000000000000000000000000000000000000000..159ba1b16e12612d59c73837b1b55ab3ba30f3b9 GIT binary patch literal 4238 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 literal 0 HcmV?d00001 diff --git a/doc/images/pivector_rbegin.png b/doc/images/pivector_rbegin.png new file mode 100644 index 0000000000000000000000000000000000000000..8e6be62d6c9d4acedcc060bfac4d76230bbb45b7 GIT binary patch literal 16863 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 literal 0 HcmV?d00001 diff --git a/libs/main/containers/pivector.h b/libs/main/containers/pivector.h index 383158fa..440f5504 100644 --- a/libs/main/containers/pivector.h +++ b/libs/main/containers/pivector.h @@ -1,17 +1,17 @@ -/*! \addtogroup Containers - * \{ - * \file pivector.h - * \brief - * \~english Declares \a PIVector - * \~russian Объявление \a PIVector - * \~\authors - * \~english - * Ivan Pelipenko peri4ko@yandex.ru; - * Andrey Bychkov work.a.b@yandex.ru; - * \~russian - * Иван Пелипенко peri4ko@yandex.ru; - * Андрей Бычков work.a.b@yandex.ru; - * \~\} */ +//! \addtogroup Containers +//! \{ +//! \file pivector.h +//! \brief +//! \~english Declares \a PIVector +//! \~russian Объявление \a PIVector +//! \~\authors +//! \~english +//! Ivan Pelipenko peri4ko@yandex.ru; +//! Andrey Bychkov work.a.b@yandex.ru; +//! \~russian +//! Иван Пелипенко peri4ko@yandex.ru; +//! Андрей Бычков work.a.b@yandex.ru; +//! \~\} */ /* PIP - Platform Independent Primitives Sequence linear container aka dynamic size array of any type @@ -36,69 +36,68 @@ #include "picontainers.h" -/*! \addtogroup Containers - * \{ - * \class PIVector pivector.h - * \brief - * \~english Sequence linear container - dynamic size array of any type - * \~russian Последовательный контейнер с линейной памятью - динамический массив любого типа - * \~\} - * \details - * \~english - * The elements are stored contiguously, - * which means that elements can be accessed not only through iterators, - * but also using offsets to regular pointers to elements. - * This means that a pointer to an element of a vector may be passed to any function - * that expects a pointer to an element of an array. - * - * The storage of the vector is handled automatically, - * being expanded and contracted as needed. - * Vectors usually occupy more space than static arrays, - * because more memory is allocated to handle future growth. - * This way a vector does not need to reallocate each time an element is inserted, - * but only when the additional memory is exhausted. - * The total amount of allocated memory can be queried using \a capacity() function. - * Reallocations are usually costly operations in terms of performance. - * The \a reserve() function can be used to eliminate reallocations - * if the number of elements is known beforehand. - * - * The complexity (efficiency) of common operations on vectors is as follows: - * - Random access - constant 𝓞(1) - * - Insertion or removal of elements at the end - amortized constant 𝓞(1) - * - Insertion or removal of elements - linear in the distance to the end of the vector 𝓞(n) - * - * \~russian - * Элементы хранятся непрерывно, а значит доступны не только через итераторы, - * но и с помощью смещений для обычных указателей на элементы. - * Это означает, что указатель на элемент вектора может передаваться в любую функцию, - * ожидающую указатель на элемент массива. - * - * Память вектора обрабатывается автоматически, - * расширяясь и сжимаясь по мере необходимости. - * Векторы обычно занимают больше места, чем статические массивы, - * поскольку больше памяти выделяется для обработки будущего роста. - * Таким образом, память для вектора требуется выделять - * не при каждой вставке элемента, - * а только после исчерпания дополнительной памяти. - * Общий объём выделенной памяти можно получить с помощью функции \a capacity(). - * - * Выделение памяти обычно является дорогостоящей операцией - * с точки зрения производительности. - * Функцию \a reserve() можно использовать для исключения выделения памяти, - * если количество элементов известно заранее. - * - * Сложность (эффективность) обычных операций над векторами следующая: - * - Произвольный доступ — постоянная 𝓞(1) - * - Вставка и удаление элементов в конце — амортизированная постоянная 𝓞(1) - * - Вставка и удаление элементов — линейная по расстоянию до конца вектора 𝓞(n) - */ +//! \addtogroup Containers +//! \{ +//! \class PIVector pivector.h +//! \brief +//! \~english Sequence linear container - dynamic size array of any type. +//! \~russian Последовательный контейнер с линейной памятью - динамический массив любого типа. +//! \~\} +//! \details +//! \~english +//! The elements are stored contiguously, +//! which means that elements can be accessed not only through iterators, +//! but also using offsets to regular pointers to elements. +//! This means that a pointer to an element of a vector may be passed to any function +//! that expects a pointer to an element of an array. +//! +//! The storage of the vector is handled automatically, +//! being expanded and contracted as needed. +//! Vectors usually occupy more space than static arrays, +//! because more memory is allocated to handle future growth. +//! This way a vector does not need to reallocate each time an element is inserted, +//! but only when the additional memory is exhausted. +//! The total amount of allocated memory can be queried using \a capacity() function. +//! Reallocations are usually costly operations in terms of performance. +//! The \a reserve() function can be used to eliminate reallocations +//! if the number of elements is known beforehand. +//! +//! The complexity (efficiency) of common operations on vectors is as follows: +//! - Random access - constant 𝓞(1) +//! - Insertion or removal of elements at the end - amortized constant 𝓞(1) +//! - Insertion or removal of elements - linear in the distance to the end of the vector 𝓞(n) +//! +//! \~russian +//! Элементы хранятся непрерывно, а значит доступны не только через итераторы, +//! но и с помощью смещений для обычных указателей на элементы. +//! Это означает, что указатель на элемент вектора может передаваться в любую функцию, +//! ожидающую указатель на элемент массива. +//! +//! Память вектора обрабатывается автоматически, +//! расширяясь и сжимаясь по мере необходимости. +//! Векторы обычно занимают больше места, чем статические массивы, +//! поскольку больше памяти выделяется для обработки будущего роста. +//! Таким образом, память для вектора требуется выделять +//! не при каждой вставке элемента, +//! а только после исчерпания дополнительной памяти. +//! Общий объём выделенной памяти можно получить с помощью функции \a capacity(). +//! +//! Выделение памяти обычно является дорогостоящей операцией +//! с точки зрения производительности. +//! Функцию \a reserve() можно использовать для исключения выделения памяти, +//! если количество элементов известно заранее. +//! +//! Сложность (эффективность) обычных операций над векторами следующая: +//! - Произвольный доступ — постоянная 𝓞(1) +//! - Вставка и удаление элементов в конце — амортизированная постоянная 𝓞(1) +//! - Вставка и удаление элементов — линейная по расстоянию до конца вектора 𝓞(n) template class PIVector { public: //! \~\brief - //! \~english Constructs an empty vector - //! \~russian Создает пустой массив + //! \~english Constructs an empty vector. + //! \~russian Создает пустой массив. inline PIVector(): piv_data(0), piv_size(0), piv_rsize(0) { PIINTROSPECTION_CONTAINER_NEW(T, sizeof(T)) } @@ -115,8 +114,8 @@ public: } //! \~\brief - //! \~english Copy constructor - //! \~russian Копирующий конструктор + //! \~english Copy constructor. + //! \~russian Копирующий конструктор. inline PIVector(const PIVector & v): piv_data(0), piv_size(0), piv_rsize(0) { PIINTROSPECTION_CONTAINER_NEW(T, sizeof(T)) alloc(v.piv_size); @@ -124,15 +123,11 @@ public: } //! \~\brief - //! \~english Contructs vector from C++11 initializer list. - //! \~russian Создает массив из списка инициализации C++11. + //! \~english Contructs vector from [C++11 initializer list](https://en.cppreference.com/w/cpp/utility/initializer_list). + //! \~russian Создает массив из [списка инициализации C++11](https://ru.cppreference.com/w/cpp/utility/initializer_list). //! \~\details - //! \~english - //! [C++11 initializer list](https://en.cppreference.com/w/cpp/utility/initializer_list). - //! \~russian - //! [Список инициализации C++11](https://ru.cppreference.com/w/cpp/utility/initializer_list). //! \~\code - //! PIVector v{1,2,3}; + //! PIVector v{1,2,3}; //! piCout << v; //! // {1, 2, 3} //! \endcode @@ -157,7 +152,7 @@ public: //! \~english Can use [Lambda expressions](https://en.cppreference.com/w/cpp/language/lambda) as constructor argument. //! \~russian Позволяет передавать [Лямбда-выражения](https://ru.cppreference.com/w/cpp/language/lambda) для создания элементов в конструкторе. //! \~\code - //! PIVector v(5, [](size_t i){return i*2;}); + //! PIVector v(5, [](size_t i){return i*2;}); //! piCout << v; //! // {0, 2, 4, 6, 8} //! \endcode @@ -167,16 +162,13 @@ public: } //! \~\brief - //! \~english Move constructor - //! \~russian Перемещающий конструктор + //! \~english Move constructor. + //! \~russian Перемещающий конструктор. inline PIVector(PIVector && v): piv_data(v.piv_data), piv_size(v.piv_size), piv_rsize(v.piv_rsize) { PIINTROSPECTION_CONTAINER_NEW(T, sizeof(T)) v._reset(); } - //! \~\brief - //! \~english Destructor - //! \~russian Деструктор inline virtual ~PIVector() { PIINTROSPECTION_CONTAINER_DELETE(T) PIINTROSPECTION_CONTAINER_FREE(T, (piv_rsize)) @@ -186,8 +178,8 @@ public: } //! \~\brief - //! \~english Assign operator - //! \~russian Оператор присваивания + //! \~english Assign operator. + //! \~russian Оператор присваивания. inline PIVector & operator =(const PIVector & v) { if (this == &v) return *this; clear(); @@ -198,8 +190,8 @@ public: } //! \~\brief - //! \~english Assign move operator - //! \~russian Оператор перемещающего присваивания + //! \~english Assign move operator. + //! \~russian Оператор перемещающего присваивания. inline PIVector & operator =(PIVector && v) { swap(v); return *this; @@ -283,21 +275,102 @@ public: inline bool operator !=(const const_reverse_iterator & it) const {return (pos != it.pos);} }; + //! \~\brief + //! \~english Iterator to the first element. + //! \~russian Итератор на первый элемент. + //! \~\details ![begin, end](doc/images/pivector_begin.png) + //! + //! \~english If the vector is empty, the returned iterator is equal to \a end. + //! \~russian Если массив - пуст, возвращаемый итератор будет равен \a end. + //! \~\sa \a end, \a rbegin, \a rend inline iterator begin() {return iterator(this, 0);} + + //! \~\brief + //! \~english Iterator to the element following the last element. + //! \~russian Итератор на элемент, следующий за последним элементом. + //! \~\details ![begin, end](doc/images/pivector_begin.png) + //! + //! \~english This element acts as a placeholder; attempting to access it results in undefined behavior. + //! \~russian Этот элемент существует лишь условно, + //! попытка доступа к нему приведёт к выходу за разрешенную память. + //! \~\sa \a begin, \a rbegin, \a rend inline iterator end() {return iterator(this, piv_size);} + inline const_iterator begin() const {return const_iterator(this, 0);} inline const_iterator end() const {return const_iterator(this, piv_size);} + + //! \~\brief + //! \~english Returns a reverse iterator to the first element of the reversed vector. + //! \~russian Обратный итератор на первый элемент. + //! \~\details ![rbegin, rend](doc/images/pivector_rbegin.png) + //! + //! \~english It corresponds to the last element of the non-reversed vector. + //! If the vector is empty, the returned iterator is equal to \a rend. + //! \~russian Итератор для прохода массива в обратном порядке. + //! Указывает на последний элемент. + //! Если массив пустой, то совпадает с итератором \a rend. + //! \~\sa \a rend, \a begin, \a end inline reverse_iterator rbegin() {return reverse_iterator(this, piv_size - 1);} + + //! \~\brief + //! \~english Returns a reverse iterator to the element following the last element of the reversed vector. + //! \~russian Обратный итератор на элемент, следующий за последним элементом. + //! \~\details ![rbegin, rend](doc/images/pivector_rbegin.png) + //! + //! \~english It corresponds to the element preceding the first element of the non-reversed vector. + //! This element acts as a placeholder, attempting to access it results in undefined behavior. + //! \~russian Итератор для прохода массива в обратном порядке. + //! Указывает на элемент, предшествующий первому элементу. + //! Этот элемент существует лишь условно, + //! попытка доступа к нему приведёт к выходу за разрешенную память. + //! \~\sa \a rbegin, \a begin, \a end inline reverse_iterator rend() {return reverse_iterator(this, -1);} + inline const_reverse_iterator rbegin() const {return const_reverse_iterator(this, piv_size - 1);} inline const_reverse_iterator rend() const {return const_reverse_iterator(this, -1);} + //! \~\brief + //! \~english Number of elements in the container. + //! \~russian Количество элементов массива. + //! \~\sa \a size_s, \a capacity, \a isEmpty, \a isNotEmpty, \a resize, \a reserve inline size_t size() const {return piv_size;} + + //! \~\brief + //! \~english Number of elements in the container as signed value. + //! \~russian Количество элементов массива в виде знакового числа. + //! \~\sa \a size, \a capacity, \a isEmpty, \a isNotEmpty, \a resize, \a reserve inline ssize_t size_s() const {return piv_size;} + + //! \~\brief + //! \~english Same as \a size. + //! \~russian Синоним \a size. + //! \~\sa \a size \a size_s, \a capacity, \a isEmpty, \a isNotEmpty, \a resize, \a reserve inline size_t length() const {return piv_size;} + + //! \~\brief + //! \~english Number of elements that the container has currently allocated space for. + //! \~russian Количество элементов, для которого сейчас выделена память контейнером. + //! \~\sa \a size \a size_s, \a isEmpty, \a isNotEmpty, \a resize, \a reserve inline size_t capacity() const {return piv_rsize;} + + //! \~\brief + //! \~english Checks if the container has no elements. + //! \~russian Проверяет пуст ли контейнер. + //! \~\return + //! \~english **true** if the container is empty, **false** otherwise + //! \~russian **true** если контейнер пуст, **false** иначе. + //! \~\sa \a size \a size_s, \a isEmpty, \a isNotEmpty, \a resize, \a reserve inline bool isEmpty() const {return (piv_size == 0);} + + //! \~\brief + //! \~english Checks if the container has elements. + //! \~russian Проверяет пуст ли контейнер. + //! \~\return + //! \~english **true** if the container is empty, **false** otherwise + //! \~russian **true** если контейнер пуст, **false** иначе. + //! \~\sa \a size \a size_s, \a isEmpty, \a isNotEmpty, \a resize, \a reserve inline bool isNotEmpty() const {return (piv_size > 0);} + inline bool any(std::function test) const { for (size_t i = 0; i < piv_size; ++i) { if (test(piv_data[i])) return true; diff --git a/main.cpp b/main.cpp index a94d025f..7525baea 100644 --- a/main.cpp +++ b/main.cpp @@ -2,30 +2,12 @@ int main(int argc, char * argv[]) { - PIThreadNotifier n; - int cnt1 = 0; - int cnt2 = 0; - int cnt3 = 0; - PIThread t1([&n, &cnt1](){n.wait(); cnt1++; piMSleep(1);}, true); - PIThread t2([&n, &cnt2](){n.wait(); cnt2++; piMSleep(2);}, true); - piCout << "created"; - piMSleep(10); - piCout << "unlock" << cnt1 << cnt2 << cnt3; - n.notifyOnce(); cnt3++; - piMSleep(10); - piCout << "unlock" << cnt1 << cnt2 << cnt3; - n.notifyOnce(); cnt3++; - piMSleep(10); - piCout << "run" << cnt1 << cnt2 << cnt3; - PIThread t3([&n, &cnt3](){n.notifyOnce(); cnt3++; piMSleep(1);}, true); - piMSleep(20); - t3.stop(); - piMSleep(100); - piCout << "exit" << cnt1 << cnt2 << cnt3; - PIByteArray ba = PIByteArray::fromHex("00aabbcc"); - PIByteArray ba2 = ba.getRange(1, 2); - piCout << ba2.toHex(); -// m.unlock(); -// piMSleep(10); + PIVector v(5, [](size_t i){return i*2;}); + v.prepend({1, 2, 3}); + piCout << v; + piCout << v.reduce([](int v, int s){return v+s;}); + piCout << v.reduce([](int v, PIString s){return s+PIString::fromNumber(v);}); + PIStringList sl = v.map([](int v){return PIString::fromNumber(v);}); + piCout << sl; return 0; }