diff --git a/libs/main/core/pibitarray.h b/libs/main/core/pibitarray.h index 65574b51..00e36804 100644 --- a/libs/main/core/pibitarray.h +++ b/libs/main/core/pibitarray.h @@ -27,31 +27,83 @@ #include "pivector.h" + +//! \ingroup Core +//! \~\brief +//! \~english The %PIBitArray class provides an space-efficient array of bits. +//! \~russian Класс %PIBitArray представляет собой компактный массив битов. class PIP_EXPORT PIBitArray { template friend PIBinaryStream

& operator >>(PIBinaryStream

& s, PIBitArray & v); template friend PIBinaryStream

& operator <<(PIBinaryStream

& s, const PIBitArray & v); public: - PIBitArray(const int & size = 0) {resize(size);} - PIBitArray(uchar val) {resize(sizeof(val) * 8); data_[0] = val;} - PIBitArray(ushort val) {resize(sizeof(val) * 8); memcpy(data(), &val, sizeof(val));} - PIBitArray(uint val) {resize(sizeof(val) * 8); memcpy(data(), &val, sizeof(val));} - PIBitArray(ulong val) {resize(sizeof(val) * 8); memcpy(data(), &val, sizeof(val));} - PIBitArray(ullong val) {resize(sizeof(val) * 8); memcpy(data(), &val, sizeof(val));} - PIBitArray(const uchar * bytes, uint size) {resize(size * 8); memcpy(data(), bytes, size);} + //! \~english Constructs bit array with "size" size. + //! \~russian Создает битовый массив с размером "size". + PIBitArray(const int & size = 0) {resize(size);} + + //! \~english Constructs bit array with size 8 and values from "val". + //! \~russian Создает битовый массив с размером 8 и значениями из "val". + PIBitArray(uchar val) {resize(sizeof(val) * 8); data_[0] = val;} + + //! \~english Constructs bit array with size 16 and values from "val". + //! \~russian Создает битовый массив с размером 16 и значениями из "val". + PIBitArray(ushort val) {resize(sizeof(val) * 8); memcpy(data(), &val, sizeof(val));} + + //! \~english Constructs bit array with size 32 and values from "val". + //! \~russian Создает битовый массив с размером 32 и значениями из "val". + PIBitArray(uint val) {resize(sizeof(val) * 8); memcpy(data(), &val, sizeof(val));} + + //! \~english Constructs bit array with size 64 and values from "val". + //! \~russian Создает битовый массив с размером 64 и значениями из "val". + PIBitArray(ullong val) {resize(sizeof(val) * 8); memcpy(data(), &val, sizeof(val));} + + //! \~english Constructs bit array with size "bytes * 8" and values from "data". + //! \~russian Создает битовый массив с размером "bytes * 8" и значениями из "data". + PIBitArray(const uchar * data, uint bytes) {resize(bytes * 8); memcpy(this->data(), data, bytes);} + + + //! \~english Returns a size in bits. + //! \~russian Возвращает размер в битах. uint bitSize() const {return size_;} + + //! \~english Returns a size in bytes. + //! \~russian Возвращает размер в байтах. uint byteSize() const {return bytesInBits(size_);} + + //! \~english Resize this array to "size" bits. + //! \~russian Изменяет размер массива до "size" битов. PIBitArray & resize(const uint & size) {size_ = size; data_.resize(bytesInBits(size_)); return *this;} + + //! \~english Set bit with index "index" to 0. + //! \~russian Устанавливает бит с индексом "index" в 0. PIBitArray & clearBit(const uint & index) {data_[index / 8] &= ~(1 << (index % 8)); return *this;} + + //! \~english Set bit with index "index" to 1. + //! \~russian Устанавливает бит с индексом "index" в 1. PIBitArray & setBit(const uint & index) {data_[index / 8] |= (1 << (index % 8)); return *this;} + + //! \~english Set bit with index "index" to "value". + //! \~russian Устанавливает бит с индексом "index" в "value". PIBitArray & writeBit(const uint & index, const bool & value) {if (value) setBit(index); else clearBit(index); return *this;} + + //! \~english Set bit with index "index" to "value". + //! \~russian Устанавливает бит с индексом "index" в "value". PIBitArray & writeBit(const uint & index, const uchar & value) {return writeBit(index, value > 0);} + + //! \~english Add bit with value "value" to the end of array. + //! \~russian Добавляет бит со значением "value" в конец массива. PIBitArray & push_back(const bool & value) {resize(size_ + 1); writeBit(size_ - 1, value); return *this;} + + //! \~english Add bit with value "value" to the end of array. + //! \~russian Добавляет бит со значением "value" в конец массива. PIBitArray & push_back(const uchar & value) {return push_back(value > 0);} + + //! \~english Insert bit with value "value" after "index" position. + //! \~russian Вставляет бит со значением "value" после положения "index". PIBitArray & insert(const uint & index, const bool & value) { resize(size_ + 1); uint fi = byteSize() - 1, si = index / 8, ti = index % 8; @@ -65,10 +117,25 @@ public: if (value) data_[si] |= (1 << ti); else data_[si] &= ~(1 << ti); return *this;} + + //! \~english Insert bit with value "value" after "index" position. + //! \~russian Вставляет бит со значением "value" после положения "index". PIBitArray & insert(const uint & index, const uchar & value) {return insert(index, value > 0);} + + //! \~english Add bit with value "value" to the beginning of array. + //! \~russian Добавляет бит со значением "value" в начало массива. PIBitArray & push_front(const bool & value) {return insert(0, value);} + + //! \~english Add bit with value "value" to the beginning of array. + //! \~russian Добавляет бит со значением "value" в начало массива. PIBitArray & push_front(const uchar & value) {return push_front(value > 0);} + + //! \~english Remove one bit from the end of array. + //! \~russian Удаляет один бит с конца массива. PIBitArray & pop_back() {return resize(size_ - 1);} + + //! \~english Remove one bit from the beginning of array. + //! \~russian Удаляет один бит с начала массива. PIBitArray & pop_front() { if (size_ == 0) return *this; uint fi = byteSize() - 1; @@ -79,24 +146,67 @@ public: data_[fi] >>= 1; resize(size_ - 1); return *this;} + + //! \~english Add bits "ba" to the end of array. + //! \~russian Добавляет биты "ba" в конец массива. PIBitArray & append(const PIBitArray & ba) {for (uint i = 0; i < ba.bitSize(); ++i) push_back(ba[i]); return *this;} + + //! \~english Returns pointer to bytes data of array. + //! \~russian Возвращает указатель на байтовое содержимое массива. uchar * data() {return data_.data();} + + //! \~english Returns data of array as \b uchar. + //! \~russian Возвращает байтовое содержимое массива как \b uchar. uchar toUChar() {if (size_ == 0) return 0; return data_[0];} + + //! \~english Returns data of array as \b ushort. + //! \~russian Возвращает байтовое содержимое массива как \b ushort. ushort toUShort() {ushort t = 0; memcpy(&t, data(), piMin(byteSize(), sizeof(t))); return t;} + + //! \~english Returns data of array as \b uint. + //! \~russian Возвращает байтовое содержимое массива как \b uint. uint toUInt() {uint t = 0; memcpy(&t, data(), piMin(byteSize(), sizeof(t))); return t;} - ulong toULong() {ulong t = 0; memcpy(&t, data(), piMin(byteSize(), sizeof(t))); return t;} + + //! \~english Returns data of array as \b ullong. + //! \~russian Возвращает байтовое содержимое массива как \b ullong. ullong toULLong() {ullong t = 0; memcpy(&t, data(), piMin(byteSize(), sizeof(t))); return t;} + + //! \~english Returns bit value at index "index". + //! \~russian Возвращает значение бита с индексом "index". bool at(const uint & index) const {return (1 & (data_[index / 8] >> (index % 8))) == 1 ? true : false;} + + //! \~english Returns bit value at index "index". + //! \~russian Возвращает значение бита с индексом "index". bool operator [](const uint & index) const {return at(index);} + + //! \~english Similar to \a append(). + //! \~russian Аналог \a append(). void operator +=(const PIBitArray & ba) {append(ba);} + + //! \~english Returns if two bit arrays are similar. + //! \~russian Возвращает равны ли для битовых массива. bool operator ==(const PIBitArray & ba) const {if (bitSize() != ba.bitSize()) return false; for (uint i = 0; i < bitSize(); ++i) if (at(i) != ba[i]) return false; return true;} + + //! \~english Returns if two bit arrays are not similar. + //! \~russian Возвращает не равны ли для битовых массива. bool operator !=(const PIBitArray & ba) const {return !(*this == ba);} + + //! \~english Resize and set values from "val". + //! \~russian Изменяет размер и устанавливает значения из "val". void operator =(const uchar & val) {resize(sizeof(val) * 8); data_[0] = val;} + + //! \~english Resize and set values from "val". + //! \~russian Изменяет размер и устанавливает значения из "val". void operator =(const ushort & val) {resize(sizeof(val) * 8); memcpy(data(), &val, sizeof(val));} + + //! \~english Resize and set values from "val". + //! \~russian Изменяет размер и устанавливает значения из "val". void operator =(const uint & val) {resize(sizeof(val) * 8); memcpy(data(), &val, sizeof(val));} - void operator =(const ulong & val) {resize(sizeof(val) * 8); memcpy(data(), &val, sizeof(val));} + + //! \~english Resize and set values from "val". + //! \~russian Изменяет размер и устанавливает значения из "val". void operator =(const ullong & val) {resize(sizeof(val) * 8); memcpy(data(), &val, sizeof(val));} private: @@ -111,6 +221,9 @@ private: //std::ostream & operator <<(std::ostream & s, const PIBitArray & ba); #endif +//! \relatesalso PIByteArray +//! \~english Output operator to \a PICout +//! \~russian Оператор вывода в \a PICout PICout operator <<(PICout s, const PIBitArray & ba); #endif // PIBITARRAY_H diff --git a/libs/main/core/picli.cpp b/libs/main/core/picli.cpp index f4ac9436..9938528c 100644 --- a/libs/main/core/picli.cpp +++ b/libs/main/core/picli.cpp @@ -35,7 +35,7 @@ //! Этот класс предоставляет удобный механизм для разбора аргументов командной строки. //! Сперва необходимо добавить аргументы в %PICLI с помощью методов \a addArgument(). //! Далее можно проверять аргументы на наличие в командной строке методом \a hasArgument(), -//! а также получить их значения при помощи \a argumentValue(). +//! а также получать их значения при помощи \a argumentValue(). //! //! \~english \section PICLI_sec1 Example //! \~russian \section PICLI_sec1 Пример @@ -52,8 +52,12 @@ //! piCout << "Value =" << cli.argumentValue("Value"); //! return 0; //! } +//! \endcode //! -//! These executions are similar: +//! \~english These executions are similar: +//! \~russian Эти вызовы будут идентичны: +//! +//! \~\code //! a.out -cd -v 10 //! a.out --value 10 -dc //! a.out -c -v 10 -d diff --git a/libs/main/core/picli.h b/libs/main/core/picli.h index d3618cd9..7574356a 100644 --- a/libs/main/core/picli.h +++ b/libs/main/core/picli.h @@ -37,56 +37,62 @@ class PIP_EXPORT PICLI { public: - //! \~english Constructor - //! \~russian Конструктор + //! \~english Constructs %PICLI from "argc" and "argv" from "int main()" method. + //! \~russian Создает %PICLI из "argc" и "argv" из метода "int main()". PICLI(int argc, char * argv[]); - //! \~english Add argument with name "name", short key = name first letter and full key = name - //! \~russian Добавляет аргумент с именем "name", коротким ключом = первой букве имени и полным ключом = имени + //! \~english Add argument with name "name", short key = name first letter and full key = name. + //! \~russian Добавляет аргумент с именем "name", коротким ключом = первой букве имени и полным ключом = имени. void addArgument(const PIString & name, bool value = false) {_args << Argument(name, name[0], name, value); needParse = true;} - //! \~english Add argument with name "name", short key = "shortKey" and full key = name - //! \~russian Добавляет аргумент с именем "name", коротким ключом = "shortKey" и полным ключом = имени + //! \~english Add argument with name "name", short key = "shortKey" and full key = name. + //! \~russian Добавляет аргумент с именем "name", коротким ключом = "shortKey" и полным ключом = имени. void addArgument(const PIString & name, const PIChar & shortKey, bool value = false) {_args << Argument(name, shortKey, name, value); needParse = true;} - //! \~english Add argument with name "name", short key = "shortKey" and full key = name - //! \~russian Добавляет аргумент с именем "name", коротким ключом = "shortKey" и полным ключом = имени + //! \~english Add argument with name "name", short key = "shortKey" and full key = name. + //! \~russian Добавляет аргумент с именем "name", коротким ключом = "shortKey" и полным ключом = имени. void addArgument(const PIString & name, const char * shortKey, bool value = false) {_args << Argument(name, PIChar(shortKey), name, value); needParse = true;} - //! \~english Add argument with name "name", short key = "shortKey" and full key = "fullKey" - //! \~russian Добавляет аргумент с именем "name", коротким ключом = "shortKey" и полным ключом = "fullKey" + //! \~english Add argument with name "name", short key = "shortKey" and full key = "fullKey". + //! \~russian Добавляет аргумент с именем "name", коротким ключом = "shortKey" и полным ключом = "fullKey". void addArgument(const PIString & name, const PIChar & shortKey, const PIString & fullKey, bool value = false) {_args << Argument(name, shortKey, fullKey, value); needParse = true;} - //! \~english Add argument with name "name", short key = "shortKey" and full key = "fullKey" - //! \~russian Добавляет аргумент с именем "name", коротким ключом = "shortKey" и полным ключом = "fullKey" + //! \~english Add argument with name "name", short key = "shortKey" and full key = "fullKey". + //! \~russian Добавляет аргумент с именем "name", коротким ключом = "shortKey" и полным ключом = "fullKey". void addArgument(const PIString & name, const char * shortKey, const PIString & fullKey, bool value = false) {_args << Argument(name, PIChar(shortKey), fullKey, value); needParse = true;} - //! \~english Returns unparsed command-line argument by index "index". Index 0 is program execute command - //! \~russian Возвращает исходный аргумент командной строки по индексу "index". Индекс 0 это команда вызова программы + //! \~english Returns unparsed command-line argument by index "index". Index 0 is program execute command. + //! \~russian Возвращает исходный аргумент командной строки по индексу "index". Индекс 0 это команда вызова программы. PIString rawArgument(int index) {parse(); return _args_raw[index];} PIString mandatoryArgument(int index) {parse(); return _args_mand[index];} PIString optionalArgument(int index) {parse(); return _args_opt[index];} - //! \~english Returns unparsed command-line arguments - //! \~russian Возвращает исходные аргументы командной строки + //! \~english Returns unparsed command-line arguments. + //! \~russian Возвращает исходные аргументы командной строки. const PIStringList & rawArguments() {parse(); return _args_raw;} const PIStringList & mandatoryArguments() {parse(); return _args_mand;} const PIStringList & optionalArguments() {parse(); return _args_opt;} - //! \~english Returns program execute command without arguments - //! \~russian Возвращает команду вызова программы без аргументов + //! \~english Returns program execute command without arguments. + //! \~russian Возвращает команду вызова программы без аргументов. PIString programCommand() {parse(); return _args_raw.size() > 0 ? _args_raw.front() : PIString();} - //! \~english Returns if argument "name" found - //! \~russian Возвращает найден ли аргумент "name" + //! \~english Returns if argument "name" found. + //! \~russian Возвращает найден ли аргумент "name". bool hasArgument(const PIString & name) {parse(); piForeach (Argument & i, _args) if (i.name == name && i.found) return true; return false;} - //! \~english Returns argument "name" value, or empty string if this is no value - //! \~russian Возвращает значение аргумента "name" или пустую строку, если значения нет + //! \~english Returns argument "name" value, or empty string if this is no value. + //! \~russian Возвращает значение аргумента "name" или пустую строку, если значения нет. PIString argumentValue(const PIString & name) {parse(); piForeach (Argument &i, _args) if (i.name == name && i.found) return i.value; return PIString();} + + //! \~english Returns short key of argument "name", or empty string if this is no argument. + //! \~russian Возвращает короткий ключ аргумента "name" или пустую строку, если аргумента нет. PIString argumentShortKey(const PIString & name) {piForeach (Argument &i, _args) if (i.name == name) return i.short_key; return PIString();} + + //! \~english Returns full key of argument "name", or empty string if this is no argument. + //! \~russian Возвращает полный ключ аргумента "name" или пустую строку, если аргумента нет. PIString argumentFullKey(const PIString & name) {piForeach (Argument &i, _args) if (i.name == name) return i.full_key; return PIString();} const PIString & shortKeyPrefix() const {return _prefix_short;} diff --git a/libs/main/core/pivariant.cpp b/libs/main/core/pivariant.cpp index fed298f5..7aa19e17 100644 --- a/libs/main/core/pivariant.cpp +++ b/libs/main/core/pivariant.cpp @@ -20,32 +20,49 @@ #include "pivariant.h" -/** \class PIVariant - * \details - * \section PIVariant_sec0 Synopsis - * This class provides general type that can contains all standard types, some - * PIP types or custom type. In case of standard types this class also provides - * convertions between them. - * - * \section PIVariant_sec1 Usage - * %PIVariant useful if you want pass many variables with different types in - * single array, e.g.: - * \code{cpp} - * PIVector array; - * array << PIVariant(10) << PIVariant(1.61) << PIVariant(true) << PIVariant("0xFF"); - * piCout << array; - * piForeachC (PIVariant & i, array) - * piCout << i.toInt(); - * \endcode - * Result: - * \code{cpp} - * {PIVariant(Int, 10), PIVariant(Double, 1,61), PIVariant(Bool, true), PIVariant(String, 0xFF)} - * 10 - * 1 - * 1 - * 255 - * \endcode - * */ +//! \class PIVariant pivariant.h +//! \details +//! \~english \section PIVariant_sec0 Synopsis +//! \~russian \section PIVariant_sec0 Краткий обзор +//! \~english +//! This class provides general type that can contains all standard types, some +//! PIP types or custom type. In case of standard types this class also provides +//! convertions between them. +//! +//! \~russian +//! Этот класс предоставляет некий общий тип, который может содержать все стандартные тип, +//! некоторые типы PIP, а также любой свой тип. В случае стандартных типов предоставляется +//! автоматическое преобразование между ними. +//! +//! \~english \section PIVariant_sec1 Usage +//! \~russian \section PIVariant_sec1 Использование +//! \~english +//! %PIVariant useful if you want pass many variables with different types in +//! single array, or type may vary from case to case, e.g.: +//! +//! \~russian +//! %PIVariant полезен когда надо передать несколько разнотипных значений +//! одним массивом, или тип заранее неизвестен, например: +//! +//! \~\code{cpp} +//! PIVector array; +//! array << PIVariant(10) << PIVariant(1.61) << PIVariant(true) << PIVariant("0xFF"); +//! piCout << array; +//! for (auto i: array) +//! piCout << i.toInt(); +//! \endcode +//! +//! \~english Result: +//! \~russian Результат: +//! \~\code{cpp} +//! {PIVariant(Int, 10), PIVariant(Double, 1,61), PIVariant(Bool, true), PIVariant(String, 0xFF)} +//! 10 +//! 1 +//! 1 +//! 255 +//! \endcode +//! + #ifdef CUSTOM_PIVARIANT PIMap * __PIVariantInfoStorage__::map = 0; @@ -158,6 +175,8 @@ PIVariant::Type PIVariant::typeFromName(const PIString & tname) { if (s == "rect") return PIVariant::pivRect; if (s == "vector") return PIVariant::pivMathVector; if (s == "matrix") return PIVariant::pivMathMatrix; + if (s == "line") return PIVariant::pivLine; + if (s == "device" || s == "iodevice") return PIVariant::pivIODevice; return PIVariant::pivInvalid; } @@ -219,12 +238,25 @@ PIString PIVariant::typeName(PIVariant::Type type) { } -/** \brief Returns variant content as boolean - * \details In case of numeric types returns \b true if value != 0. \n - * In case of String type returns \a PIString::toBool(). \n - * In case of StringList type returns \b false if string list is empty, - * otherwise returns \a PIString::toBool() of first string. \n - * In case of other types returns \b false. */ +//! \~\brief +//! \~english Returns variant content as boolean +//! \~russian Возвращает содержимое как boolean +//! +//! \~\details +//! \~english +//! In case of numeric types returns \b true if value != 0. \n +//! In case of String type returns \a PIString::toBool(). \n +//! In case of StringList type returns \b false if string list is empty, +//! otherwise returns \a PIString::toBool() of first string. \n +//! In case of other types returns \b false. +//! +//! \~russian +//! Для численных типов возвращает \b true если значение != 0. \n +//! Для типа String возвращает \a PIString::toBool(). \n +//! Для типа StringList возвращает \b false если массив пустой, \n +//! иначе возвращает \a PIString::toBool() первой строки. \n +//! Для остальных типов возвращает \b false. +//! bool PIVariant::toBool() const { PIByteArray ba(_content); switch (_type) { @@ -250,12 +282,25 @@ bool PIVariant::toBool() const { -/** \brief Returns variant content as int - * \details In case of numeric types returns integer value. \n - * In case of String type returns \a PIString::toInt(). \n - * In case of StringList type returns \b 0 if string list is empty, - * otherwise returns \a PIString::toInt() of first string. \n - * In case of other types returns \b 0. */ +//! \~\brief +//! \~english Returns variant content as int +//! \~russian Возвращает содержимое как int +//! +//! \~\details +//! \~english +//! In case of numeric types returns integer value. \n +//! In case of String type returns \a PIString::toInt(). \n +//! In case of StringList type returns \b 0 if string list is empty, +//! otherwise returns \a PIString::toInt() of first string. \n +//! In case of other types returns \b 0. +//! +//! \~russian +//! Для численных типов возвращает целочисленное значение. \n +//! Для типа String возвращает \a PIString::toInt(). \n +//! Для типа StringList возвращает \b 0 если массив пустой, \n +//! иначе возвращает \a PIString::toInt() первой строки. \n +//! Для остальных типов возвращает \b 0. +//! int PIVariant::toInt() const { PIByteArray ba(_content); switch (_type) { @@ -282,12 +327,25 @@ int PIVariant::toInt() const { } -/** \brief Returns variant content as long long - * \details In case of numeric types returns integer value. \n - * In case of String type returns \a PIString::toLLong(). \n - * In case of StringList type returns \b 0L if string list is empty, - * otherwise returns \a PIString::toLLong() of first string. \n - * In case of other types returns \b 0L. */ +//! \~\brief +//! \~english Returns variant content as long long +//! \~russian Возвращает содержимое как long long +//! +//! \~\details +//! \~english +//! In case of numeric types returns integer value. \n +//! In case of String type returns \a PIString::toLLong(). \n +//! In case of StringList type returns \b 0L if string list is empty, +//! otherwise returns \a PIString::toLLong() of first string. \n +//! In case of other types returns \b 0L. +//! +//! \~russian +//! Для численных типов возвращает целочисленное значение. \n +//! Для типа String возвращает \a PIString::toLLong(). \n +//! Для типа StringList возвращает \b 0L если массив пустой, \n +//! иначе возвращает \a PIString::toLLong() первой строки. \n +//! Для остальных типов возвращает \b 0L. +//! llong PIVariant::toLLong() const { PIByteArray ba(_content); switch (_type) { @@ -313,12 +371,25 @@ llong PIVariant::toLLong() const { } -/** \brief Returns variant content as float - * \details In case of numeric types returns float value. \n - * In case of String type returns \a PIString::toFloat(). \n - * In case of StringList type returns \b 0.f if string list is empty, - * otherwise returns \a PIString::toFloat() of first string. \n - * In case of other types returns \b 0.f. */ +//! \~\brief +//! \~english Returns variant content as float +//! \~russian Возвращает содержимое как float +//! +//! \~\details +//! \~english +//! In case of numeric types returns float value. \n +//! In case of String type returns \a PIString::toFloat(). \n +//! In case of StringList type returns \b 0.f if string list is empty, +//! otherwise returns \a PIString::toFloat() of first string. \n +//! In case of other types returns \b 0.f . +//! +//! \~russian +//! Для численных типов возвращает вещественное значение. \n +//! Для типа String возвращает \a PIString::toFloat(). \n +//! Для типа StringList возвращает \b 0.f если массив пустой, \n +//! иначе возвращает \a PIString::toFloat() первой строки. \n +//! Для остальных типов возвращает \b 0.f . +//! float PIVariant::toFloat() const { PIByteArray ba(_content); switch (_type) { @@ -344,12 +415,25 @@ float PIVariant::toFloat() const { } -/** \brief Returns variant content as double - * \details In case of numeric types returns double value. \n - * In case of String type returns \a PIString::toDouble(). \n - * In case of StringList type returns \b 0. if string list is empty, - * otherwise returns \a PIString::toDouble() of first string. \n - * In case of other types returns \b 0.. */ +//! \~\brief +//! \~english Returns variant content as double +//! \~russian Возвращает содержимое как double +//! +//! \~\details +//! \~english +//! In case of numeric types returns double value. \n +//! In case of String type returns \a PIString::toDouble(). \n +//! In case of StringList type returns \b 0. if string list is empty, +//! otherwise returns \a PIString::toDouble() of first string. \n +//! In case of other types returns \b 0. . +//! +//! \~russian +//! Для численных типов возвращает вещественное значение. \n +//! Для типа String возвращает \a PIString::toDouble(). \n +//! Для типа StringList возвращает \b 0. если массив пустой, \n +//! иначе возвращает \a PIString::toDouble() первой строки. \n +//! Для остальных типов возвращает \b 0. . +//! double PIVariant::toDouble() const { PIByteArray ba(_content); switch (_type) { @@ -375,12 +459,25 @@ double PIVariant::toDouble() const { } -/** \brief Returns variant content as long double - * \details In case of numeric types returns long double value. \n - * In case of String type returns \a PIString::toLDouble(). \n - * In case of StringList type returns \b 0. if string list is empty, - * otherwise returns \a PIString::toLDouble() of first string. \n - * In case of other types returns \b 0.. */ +//! \~\brief +//! \~english Returns variant content as long double +//! \~russian Возвращает содержимое как long double +//! +//! \~\details +//! \~english +//! In case of numeric types returns long double value. \n +//! In case of String type returns \a PIString::toLDouble(). \n +//! In case of StringList type returns \b 0. if string list is empty, +//! otherwise returns \a PIString::toLDouble() of first string. \n +//! In case of other types returns \b 0. . +//! +//! \~russian +//! Для численных типов возвращает вещественное значение. \n +//! Для типа String возвращает \a PIString::toLDouble(). \n +//! Для типа StringList возвращает \b 0. если массив пустой, \n +//! иначе возвращает \a PIString::toLDouble() первой строки. \n +//! Для остальных типов возвращает \b 0. . +//! ldouble PIVariant::toLDouble() const { PIByteArray ba(_content); switch (_type) { @@ -406,10 +503,21 @@ ldouble PIVariant::toLDouble() const { } -/** \brief Returns variant content as time - * \details In case of Time type returns time value. \n - * In case of DateTime type returns time part of value. \n - * In case of other types returns \a PITime(). */ +//! \~\brief +//! \~english Returns variant content as time +//! \~russian Возвращает содержимое как время +//! +//! \~\details +//! \~english +//! In case of Time type returns time value. \n +//! In case of DateTime type returns time part of value. \n +//! In case of other types returns \a PITime(). +//! +//! \~russian +//! Для типа Time возвращает время. \n +//! Для типа DateTime возвращает часть времени. \n +//! Для остальных типов возвращает \a PITime(). +//! PITime PIVariant::toTime() const { PIByteArray ba(_content); if (_type == PIVariant::pivTime) {PITime r; ba >> r; return r;} @@ -419,10 +527,21 @@ PITime PIVariant::toTime() const { } -/** \brief Returns variant content as date - * \details In case of Date type returns date value. \n - * In case of DateTime type returns date part of value. \n - * In case of other types returns \a PIDate(). */ +//! \~\brief +//! \~english Returns variant content as date +//! \~russian Возвращает содержимое как дата +//! +//! \~\details +//! \~english +//! In case of Date type returns date value. \n +//! In case of DateTime type returns date part of value. \n +//! In case of other types returns \a PIDate(). +//! +//! \~russian +//! Для типа Date возвращает дату. \n +//! Для типа DateTime возвращает часть даты. \n +//! Для остальных типов возвращает \a PIDate(). +//! PIDate PIVariant::toDate() const { PIByteArray ba(_content); if (_type == PIVariant::pivDate) {PIDate r; ba >> r; return r;} @@ -432,11 +551,23 @@ PIDate PIVariant::toDate() const { } -/** \brief Returns variant content as date and time - * \details In case of Time type returns time value with null date. \n - * In case of Date type returns date value with null time. \n - * In case of DateTime type returns date and time. \n - * In case of other types returns \a PIDateTime(). */ +//! \~\brief +//! \~english Returns variant content as date and time +//! \~russian Возвращает содержимое как дата и время +//! +//! \~\details +//! \~english +//! In case of Time type returns time value with null date. \n +//! In case of Date type returns date value with null time. \n +//! In case of DateTime type returns date and time. \n +//! In case of other types returns \a PIDateTime(). +//! +//! \~russian +//! Для типа Time возвращает время без даты. \n +//! Для типа Date возвращает дату без времени. \n +//! Для типа DateTime возвращает время и дату. \n +//! Для остальных типов возвращает \a PIDateTime(). +//! PIDateTime PIVariant::toDateTime() const { PIByteArray ba(_content); if (_type == PIVariant::pivTime) {PITime r; ba >> r; return PIDateTime(r);} @@ -447,10 +578,19 @@ PIDateTime PIVariant::toDateTime() const { } -/** \brief Returns variant content as system time - * \details In case of SystemTime type returns system time. \n - * In case of other types returns \a PISystemTime::fromSeconds() from - * double value of variant content. */ +//! \~\brief +//! \~english Returns variant content as system time +//! \~russian Возвращает содержимое как системное время +//! +//! \~\details +//! \~english +//! In case of SystemTime type returns system time. \n +//! In case of other types returns \a PISystemTime::fromSeconds() from \a toDouble(). +//! +//! \~russian +//! Для типа SystemTime возвращает системное время. \n +//! Для остальных типов возвращает \a PISystemTime::fromSeconds() от \a toDouble(). +//! PISystemTime PIVariant::toSystemTime() const { PIByteArray ba(_content); if (_type == PIVariant::pivSystemTime) {PISystemTime r; ba >> r; return r;} @@ -459,15 +599,30 @@ PISystemTime PIVariant::toSystemTime() const { } -/** \brief Returns variant content as string - * \details In case of numeric types returns \a PIString::fromNumber(). \n - * In case of String type returns string value. \n - * In case of StringList type returns joined string ("(" + PIStringList::join("; ") + ")"). \n - * In case of BitArray or ByteArray types returns number of bits/bytes. \n - * In case of Time, Date or DateTime types returns toString() of this values. \n - * In case of SystemTime types returns second and nanoseconds of time - * ("(PISystemTime::seconds s, PISystemTime::nanoseconds ns)"). \n - * In case of other types returns \b "". */ +//! \~\brief +//! \~english Returns variant content as string +//! \~russian Возвращает содержимое как строка +//! +//! \~\details +//! \~english +//! In case of numeric types returns \a PIString::fromNumber(). \n +//! In case of String type returns string value. \n +//! In case of StringList type returns joined string ("(" + PIStringList::join("; ") + ")"). \n +//! In case of BitArray or ByteArray types returns number of bits/bytes. \n +//! In case of Time, Date or DateTime types returns toString() of this values. \n +//! In case of SystemTime types returns second and nanoseconds of time +//! ("(PISystemTime::seconds s, PISystemTime::nanoseconds ns)"). \n +//! In case of other types returns \b "". +//! +//! \~russian +//! Для численных типов возвращает \a PIString::fromNumber(). \n +//! Для типа String возвращает строку. \n +//! Для типа StringList возвращает объединенную строку ("(" + PIStringList::join("; ") + ")"). \n +//! Для типов BitArray или ByteArray возвращает количество бит/байт. \n +//! Для типов Time, Date или DateTime возвращает toString(). \n +//! Для типов SystemTime возвращает секунды и наносекунды в формате "(s, ns)". +//! Для остальных типов возвращает \b "". +//! PIString PIVariant::toString() const { PIByteArray ba(_content); switch (_type) { @@ -500,9 +655,19 @@ PIString PIVariant::toString() const { } -/** \brief Returns variant content as strings list - * \details In case of StringList type returns strings list value. \n - * In case of other types returns \a PIStringList with one string value of variant content. */ +//! \~\brief +//! \~english Returns variant content as strings list +//! \~russian Возвращает содержимое как массив строк +//! +//! \~\details +//! \~english +//! In case of StringList type returns strings list value. \n +//! In case of other types returns \a PIStringList with one string \a toString(). +//! +//! \~russian +//! Для типа StringList возвращает массив строк. \n +//! Для остальных типов возвращает \a PIStringList с одной строкой \a toString(). +//! PIStringList PIVariant::toStringList() const { PIByteArray ba(_content); if (_type == PIVariant::pivStringList) {PIStringList r; ba >> r; return r;} @@ -512,9 +677,19 @@ PIStringList PIVariant::toStringList() const { } -/** \brief Returns variant content as bit array - * \details In case of BitArray type returns bit array value. \n - * In case of other types returns \a PIBitArray from \a toLLong() value. */ +//! \~\brief +//! \~english Returns variant content as bit array +//! \~russian Возвращает содержимое как массив битов +//! +//! \~\details +//! \~english +//! In case of BitArray type returns bit array value. \n +//! In case of other types returns \a PIBitArray from \a toLLong() value. +//! +//! \~russian +//! Для типа BitArray возвращает массив битов. \n +//! Для остальных типов возвращает \a PIBitArray от значения \a toLLong(). +//! PIBitArray PIVariant::toBitArray() const { PIByteArray ba(_content); if (_type == PIVariant::pivBitArray) {PIBitArray r; ba >> r; return r;} @@ -523,9 +698,19 @@ PIBitArray PIVariant::toBitArray() const { } -/** \brief Returns variant content as byte array - * \details In case of ByteArray type returns byte array value. \n - * In case of other types returns empty \a PIByteArray. */ +//! \~\brief +//! \~english Returns variant content as byte array +//! \~russian Возвращает содержимое как массив байтов +//! +//! \~\details +//! \~english +//! In case of ByteArray type returns byte array value. \n +//! In case of other types returns empty \a PIByteArray. +//! +//! \~russian +//! Для типа ByteArray возвращает массив байтов. \n +//! Для остальных типов возвращает пустой \a PIByteArray. +//! PIByteArray PIVariant::toByteArray() const { PIByteArray ba(_content); if (_type == PIVariant::pivByteArray) {PIByteArray r; ba >> r; return r;} @@ -534,11 +719,23 @@ PIByteArray PIVariant::toByteArray() const { } -/** \brief Returns variant content as enum - * \details In case of Enum type returns enum value. \n - * In case of String returns Enum with one member. \n - * In case of StringList returns Enum with corresponding members. \n - * In case of other types returns empty Enum. */ +//! \~\brief +//! \~english Returns variant content as enum +//! \~russian Возвращает содержимое как перечисление +//! +//! \~\details +//! \~english +//! In case of Enum type returns enum value. \n +//! In case of String returns Enum with one member. \n +//! In case of StringList returns Enum with corresponding members. \n +//! In case of other types returns empty Enum. +//! +//! \~russian +//! Для типа Enum возвращает перечисление. \n +//! Для типа String возвращает Enum с одним членом. \n +//! Для типа StringList возвращает Enum с членами по строкам. \n +//! Для остальных типов возвращает пустой Enum. +//! PIVariantTypes::Enum PIVariant::toEnum() const { PIByteArray ba(_content); if (_type == PIVariant::pivEnum) {PIVariantTypes::Enum r; ba >> r; return r;} @@ -549,10 +746,21 @@ PIVariantTypes::Enum PIVariant::toEnum() const { } -/** \brief Returns variant content as file - * \details In case of File type returns file value. \n - * In case of String returns File with string value path. \n - * In case of other types returns empty File. */ +//! \~\brief +//! \~english Returns variant content as file +//! \~russian Возвращает содержимое как файл +//! +//! \~\details +//! \~english +//! In case of File type returns file value. \n +//! In case of String returns File with string value path. \n +//! In case of other types returns empty File. +//! +//! \~russian +//! Для типа File возвращает файл. \n +//! Для типа String возвращает File с путем значения строки. \n +//! Для остальных типов возвращает пустой File. +//! PIVariantTypes::File PIVariant::toFile() const { PIByteArray ba(_content); if (_type == PIVariant::pivFile) {PIVariantTypes::File r; ba >> r; return r;} @@ -562,10 +770,21 @@ PIVariantTypes::File PIVariant::toFile() const { } -/** \brief Returns variant content as dir - * \details In case of Dir type returns dir value. \n - * In case of String returns Dir with string value path. \n - * In case of other types returns empty Dir. */ +//! \~\brief +//! \~english Returns variant content as dir +//! \~russian Возвращает содержимое как директория +//! +//! \~\details +//! \~english +//! In case of Dir type returns dir value. \n +//! In case of String returns Dir with string value path. \n +//! In case of other types returns empty Dir. +//! +//! \~russian +//! Для типа Dir возвращает директорию. \n +//! Для типа String возвращает Dir с путем значения строки. \n +//! Для остальных типов возвращает пустой Dir. +//! PIVariantTypes::Dir PIVariant::toDir() const { PIByteArray ba(_content); if (_type == PIVariant::pivDir) {PIVariantTypes::Dir r; ba >> r; return r;} @@ -575,10 +794,21 @@ PIVariantTypes::Dir PIVariant::toDir() const { } -/** \brief Returns variant content as color - * \details In case of Color type returns color value. \n - * In case of int returns color with int value. \n - * In case of other types returns empty Color. */ +//! \~\brief +//! \~english Returns variant content as color +//! \~russian Возвращает содержимое как цвет +//! +//! \~\details +//! \~english +//! In case of Color type returns color value. \n +//! In case of Int returns color with int value. \n +//! In case of other types returns empty Color. +//! +//! \~russian +//! Для типа Color возвращает цвет. \n +//! Для типа Int возвращает цвет с целочисленным значением. \n +//! Для остальных типов возвращает пустой Color. +//! PIVariantTypes::Color PIVariant::toColor() const { PIByteArray ba(_content); if (_type == PIVariant::pivColor) {PIVariantTypes::Color r; ba >> r; return r;} @@ -588,9 +818,19 @@ PIVariantTypes::Color PIVariant::toColor() const { } -/** \brief Returns variant content as IODevice - * \details In case of IODevice type returns IODevice value. \n - * In case of other types returns empty IODevice. */ +//! \~\brief +//! \~english Returns variant content as IODevice +//! \~russian Возвращает содержимое как IODevice +//! +//! \~\details +//! \~english +//! In case of IODevice type returns IODevice value. \n +//! In case of other types returns empty IODevice. +//! +//! \~russian +//! Для типа IODevice возвращает IODevice. \n +//! Для остальных типов возвращает пустой IODevice. +//! PIVariantTypes::IODevice PIVariant::toIODevice() const { PIByteArray ba(_content); if (_type == PIVariant::pivIODevice) {PIVariantTypes::IODevice r; ba >> r; return r;} @@ -598,9 +838,19 @@ PIVariantTypes::IODevice PIVariant::toIODevice() const { } -/** \brief Returns variant content as point - * \details In case of PIPointd type returns point value. \n - * In case of other types returns empty PIPointd. */ +//! \~\brief +//! \~english Returns variant content as point +//! \~russian Возвращает содержимое как точка +//! +//! \~\details +//! \~english +//! In case of Point type returns point value. \n +//! In case of other types returns empty PIPointd. +//! +//! \~russian +//! Для типа Point возвращает точку. \n +//! Для остальных типов возвращает пустую PIPointd. +//! PIPointd PIVariant::toPoint() const { PIByteArray ba(_content); if (_type == PIVariant::pivPoint) {PIPointd r; ba >> r; return r;} @@ -608,9 +858,19 @@ PIPointd PIVariant::toPoint() const { } -/** \brief Returns variant content as rect - * \details In case of PIRectd type returns rect value. \n - * In case of other types returns empty PIRectd. */ +//! \~\brief +//! \~english Returns variant content as rect +//! \~russian Возвращает содержимое как прямоугольник +//! +//! \~\details +//! \~english +//! In case of Rect type returns rect value. \n +//! In case of other types returns empty PIRectd. +//! +//! \~russian +//! Для типа Rect возвращает прямоугольник. \n +//! Для остальных типов возвращает пустой PIRectd. +//! PIRectd PIVariant::toRect() const { PIByteArray ba(_content); if (_type == PIVariant::pivRect) {PIRectd r; ba >> r; return r;} @@ -618,9 +878,19 @@ PIRectd PIVariant::toRect() const { } -/** \brief Returns variant content as line - * \details In case of PILined type returns line value. \n - * In case of other types returns empty PILined. */ +//! \~\brief +//! \~english Returns variant content as line +//! \~russian Возвращает содержимое как линия +//! +//! \~\details +//! \~english +//! In case of Line type returns line value. \n +//! In case of other types returns empty PILined. +//! +//! \~russian +//! Для типа Line возвращает линию. \n +//! Для остальных типов возвращает пустую PILined. +//! PILined PIVariant::toLine() const { PIByteArray ba(_content); if (_type == PIVariant::pivLine) {PILined r; ba >> r; return r;} @@ -628,9 +898,19 @@ PILined PIVariant::toLine() const { } -/** \brief Returns variant content as math vector - * \details In case of PIMathVectord type returns rect value. \n - * In case of other types returns empty PIMathVectord. */ +//! \~\brief +//! \~english Returns variant content as math vector +//! \~russian Возвращает содержимое как вектор +//! +//! \~\details +//! \~english +//! In case of MathVector type returns rect value. \n +//! In case of other types returns empty PIMathVectord. +//! +//! \~russian +//! Для типа MathVector возвращает вектор. \n +//! Для остальных типов возвращает пустой PIMathVectord. +//! PIMathVectord PIVariant::toMathVector() const { PIByteArray ba(_content); if (_type == PIVariant::pivMathVector) {PIMathVectord r; ba >> r; return r;} @@ -638,9 +918,19 @@ PIMathVectord PIVariant::toMathVector() const { } -/** \brief Returns variant content as math matrix - * \details In case of PIMathMatrixd type returns rect value. \n - * In case of other types returns empty PIMathMatrixd. */ +//! \~\brief +//! \~english Returns variant content as math matrix +//! \~russian Возвращает содержимое как матрица +//! +//! \~\details +//! \~english +//! In case of MathMatrix type returns rect value. \n +//! In case of other types returns empty PIMathMatrixd. +//! +//! \~russian +//! Для типа MathMatrix возвращает матрицу. \n +//! Для остальных типов возвращает пустую PIMathMatrixd. +//! PIMathMatrixd PIVariant::toMathMatrix() const { PIByteArray ba(_content); if (_type == PIVariant::pivMathMatrix) {PIMathMatrixd r; ba >> r; return r;} diff --git a/libs/main/core/pivariant.h b/libs/main/core/pivariant.h index b0baad33..c3ab9af8 100644 --- a/libs/main/core/pivariant.h +++ b/libs/main/core/pivariant.h @@ -33,6 +33,23 @@ #include "pimathmatrix.h" +#ifdef DOXYGEN + +//! \relatesalso PIVariant +//! \~\brief +//! \~english Macro to register type for using in %PIVariant +//! \~russian Макрос для регистрации типа для использования в %PIVariant +# define REGISTER_VARIANT(Typename) + +//! \relatesalso PIVariant +//! \~\brief +//! \~english Macro to register type with namespace for using in %PIVariant +//! \~russian Макрос для регистрации типа с пространством имен для использования в %PIVariant +# define REGISTER_NS_VARIANT(Namespace, Typename) + +#endif + + #ifndef QNX # define CUSTOM_PIVARIANT #endif @@ -204,245 +221,316 @@ classname_to __PIVariantFunctions__::castVariant(c //! \ingroup Core //! \~\brief //! \~english Variant type. +//! \~russian Вариантный тип. class PIP_EXPORT PIVariant { friend PICout operator <<(PICout s, const PIVariant & v); BINARY_STREAM_FRIEND(PIVariant); public: - //! Type of %PIVariant content + //! \~english Type of %PIVariant content + //! \~russian Тип содержимого %PIVariant enum Type { - pivInvalid /** Invalid type , default type of empty contructor */ = 0 , - pivBool /** bool */ , - pivChar /** char */ , - pivUChar /** uchar */ , - pivShort /** short */ , - pivUShort /** ushort */ , - pivInt /** int */ , - pivUInt /** uint */ , - pivLLong /** llong */ , - pivULLong /** ullong */ , - pivFloat /** float */ , - pivDouble /** double */ , - pivLDouble /** ldouble */ , - pivComplexd /** complexd */ , - pivComplexld /** complexld */ , - pivBitArray /** PIBitArray */ , - pivByteArray /** PIByteArray */ , - pivString /** PIString */ , + pivInvalid /** \~english Invalid type, default type of empty contructor \~russian Недействительный тип, также конструированный по умолчанию */ = 0 , + pivBool /** bool */ , + pivChar /** char */ , + pivUChar /** uchar */ , + pivShort /** short */ , + pivUShort /** ushort */ , + pivInt /** int */ , + pivUInt /** uint */ , + pivLLong /** llong */ , + pivULLong /** ullong */ , + pivFloat /** float */ , + pivDouble /** double */ , + pivLDouble /** ldouble */ , + pivComplexd /** complexd */ , + pivComplexld /** complexld */ , + pivBitArray /** PIBitArray */ , + pivByteArray /** PIByteArray */ , + pivString /** PIString */ , pivStringList /** PIStringList */ , - pivTime /** PITime */ , - pivDate /** PIDate */ , - pivDateTime /** PIDateTime */ , + pivTime /** PITime */ , + pivDate /** PIDate */ , + pivDateTime /** PIDateTime */ , pivSystemTime /** PISystemTime */ , - pivEnum /** PIVariantTypes::Enum */ , - pivFile /** PIVariantTypes::File */ , - pivDir /** PIVariantTypes::Dir */ , - pivColor /** PIVariantTypes::Color */ , - pivPoint /** PIPoint */ , - pivRect /** PIRect */ , - pivIODevice /** PIVariantTypes::IODevice */ , + pivEnum /** PIVariantTypes::Enum */ , + pivFile /** PIVariantTypes::File */ , + pivDir /** PIVariantTypes::Dir */ , + pivColor /** PIVariantTypes::Color */ , + pivPoint /** PIPoint */ , + pivRect /** PIRect */ , + pivIODevice /** PIVariantTypes::IODevice */ , pivMathVector /** PIMathVector */ , pivMathMatrix /** PIMathMatrix */ , - pivLine /** PILine */ , - pivCustom /** Custom */ = 0xFF + pivLine /** PILine */ , + pivCustom /** \~english Custom \~russian Свой тип */ = 0xFF }; - //! Construct \a pivInvalid %PIVariant + //! \~english Construct \a pivInvalid %PIVariant + //! \~russian Создает \a pivInvalid %PIVariant PIVariant(); + //! \~english Contructs a copy of %PIVariant. + //! \~russian Создает копию %PIVariant. PIVariant(const PIVariant & v); + //! \~english Move constructor. + //! \~russian Перемещающий конструктор. PIVariant(PIVariant && v); - //! Constructs %PIVariant from string + //! \~english Constructs %PIVariant from string + //! \~russian Создает %PIVariant из строки. PIVariant(const char * v) {initType(PIString(v));} - //! Constructs %PIVariant from boolean + //! \~english Constructs %PIVariant from boolean + //! \~russian Создает %PIVariant из логического значения. PIVariant(const bool v) {initType(v);} - //! Constructs %PIVariant from char + //! \~english Constructs %PIVariant from char + //! \~russian Создает %PIVariant из символа. PIVariant(const char v) {initType(v);} - //! Constructs %PIVariant from integer + //! \~english Constructs %PIVariant from integer + //! \~russian Создает %PIVariant из целого числа. PIVariant(const uchar v) {initType(v);} - //! Constructs %PIVariant from integer + //! \~english Constructs %PIVariant from integer + //! \~russian Создает %PIVariant из целого числа. PIVariant(const short v) {initType(v);} - //! Constructs %PIVariant from integer + //! \~english Constructs %PIVariant from integer + //! \~russian Создает %PIVariant из целого числа. PIVariant(const ushort v) {initType(v);} - //! Constructs %PIVariant from integer + //! \~english Constructs %PIVariant from integer + //! \~russian Создает %PIVariant из целого числа. PIVariant(const int & v) {initType(v);} - //! Constructs %PIVariant from integer + //! \~english Constructs %PIVariant from integer + //! \~russian Создает %PIVariant из целого числа. PIVariant(const uint & v) {initType(v);} - //! Constructs %PIVariant from integer + //! \~english Constructs %PIVariant from integer + //! \~russian Создает %PIVariant из целого числа. PIVariant(const llong & v) {initType(v);} - //! Constructs %PIVariant from integer + //! \~english Constructs %PIVariant from integer + //! \~russian Создает %PIVariant из целого числа. PIVariant(const ullong & v) {initType(v);} - //! Constructs %PIVariant from float + //! \~english Constructs %PIVariant from float + //! \~russian Создает %PIVariant из вещественного числа. PIVariant(const float & v) {initType(v);} - //! Constructs %PIVariant from double + //! \~english Constructs %PIVariant from double + //! \~russian Создает %PIVariant из вещественного числа. PIVariant(const double & v) {initType(v);} - //! Constructs %PIVariant from long double + //! \~english Constructs %PIVariant from long double + //! \~russian Создает %PIVariant из вещественного числа. PIVariant(const ldouble & v) {initType(v);} - //! Constructs %PIVariant from bit array + //! \~english Constructs %PIVariant from bit array + //! \~russian Создает %PIVariant из массива битов. PIVariant(const PIBitArray & v) {initType(v);} - //! Constructs %PIVariant from byte array + //! \~english Constructs %PIVariant from byte array + //! \~russian Создает %PIVariant из массива байтов. PIVariant(const PIByteArray & v) {initType(v);} - //! Constructs %PIVariant from string + //! \~english Constructs %PIVariant from string + //! \~russian Создает %PIVariant из строки. PIVariant(const PIString & v) {initType(v);} - //! Constructs %PIVariant from strings list + //! \~english Constructs %PIVariant from strings list + //! \~russian Создает %PIVariant из массива строк. PIVariant(const PIStringList & v) {initType(v);} - //! Constructs %PIVariant from time + //! \~english Constructs %PIVariant from time + //! \~russian Создает %PIVariant из времени. PIVariant(const PITime & v) {initType(v);} - //! Constructs %PIVariant from date + //! \~english Constructs %PIVariant from date + //! \~russian Создает %PIVariant из даты. PIVariant(const PIDate & v) {initType(v);} - //! Constructs %PIVariant from date and time + //! \~english Constructs %PIVariant from date and time + //! \~russian Создает %PIVariant из даты и времени. PIVariant(const PIDateTime & v) {initType(v);} - //! Constructs %PIVariant from system time + //! \~english Constructs %PIVariant from system time + //! \~russian Создает %PIVariant из системного времени. PIVariant(const PISystemTime & v) {initType(v);} - //! Constructs %PIVariant from enum + //! \~english Constructs %PIVariant from enum + //! \~russian Создает %PIVariant из перечисления. PIVariant(const PIVariantTypes::Enum & v) {initType(v);} - //! Constructs %PIVariant from file + //! \~english Constructs %PIVariant from file + //! \~russian Создает %PIVariant из файла. PIVariant(const PIVariantTypes::File & v) {initType(v);} - //! Constructs %PIVariant from dir + //! \~english Constructs %PIVariant from dir + //! \~russian Создает %PIVariant из директории. PIVariant(const PIVariantTypes::Dir & v) {initType(v);} - //! Constructs %PIVariant from color + //! \~english Constructs %PIVariant from color + //! \~russian Создает %PIVariant из цвета. PIVariant(const PIVariantTypes::Color & v) {initType(v);} - //! Constructs %PIVariant from IODevice + //! \~english Constructs %PIVariant from IODevice + //! \~russian Создает %PIVariant из IODevice. PIVariant(const PIVariantTypes::IODevice & v) {initType(v);} - //! Constructs %PIVariant from point + //! \~english Constructs %PIVariant from point + //! \~russian Создает %PIVariant из точки. PIVariant(const PIPointd & v) {initType(v);} - //! Constructs %PIVariant from rect + //! \~english Constructs %PIVariant from rect + //! \~russian Создает %PIVariant из прямоугольника. PIVariant(const PIRectd & v) {initType(v);} - //! Constructs %PIVariant from line + //! \~english Constructs %PIVariant from line + //! \~russian Создает %PIVariant из линии. PIVariant(const PILined & v) {initType(v);} - //! Constructs %PIVariant from MathVector + //! \~english Constructs %PIVariant from MathVector + //! \~russian Создает %PIVariant из MathVector. PIVariant(const PIMathVectord & v) {initType(v);} - //! Constructs %PIVariant from MathMatrix + //! \~english Constructs %PIVariant from MathMatrix + //! \~russian Создает %PIVariant из MathMatrix. PIVariant(const PIMathMatrixd & v) {initType(v);} - //! Set variant content and type to string + //! \~english Set variant content and type to string + //! \~russian Устанавливает значение и тип из строки void setValue(const char * v) {setValue(PIString(v));} - //! Set variant content and type to boolean + //! \~english Set variant content and type to boolean + //! \~russian Устанавливает значение и тип из void setValue(const bool v) {initType(v);} - //! Set variant content and type to char + //! \~english Set variant content and type to char + //! \~russian Устанавливает значение и тип из символа void setValue(const char v) {initType(v);} - //! Set variant content and type to integer + //! \~english Set variant content and type to integer + //! \~russian Устанавливает значение и тип из целого числа void setValue(const uchar v) {initType(v);} - //! Set variant content and type to integer + //! \~english Set variant content and type to integer + //! \~russian Устанавливает значение и тип из целого числа void setValue(const short v) {initType(v);} - //! Set variant content and type to integer + //! \~english Set variant content and type to integer + //! \~russian Устанавливает значение и тип из целого числа void setValue(const ushort v) {initType(v);} - //! Set variant content and type to integer + //! \~english Set variant content and type to integer + //! \~russian Устанавливает значение и тип из целого числа void setValue(const int & v) {initType(v);} - //! Set variant content and type to integer + //! \~english Set variant content and type to integer + //! \~russian Устанавливает значение и тип из целого числа void setValue(const uint & v) {initType(v);} - //! Set variant content and type to integer + //! \~english Set variant content and type to integer + //! \~russian Устанавливает значение и тип из целого числа void setValue(const llong & v) {initType(v);} - //! Set variant content and type to integer + //! \~english Set variant content and type to integer + //! \~russian Устанавливает значение и тип из целого числа void setValue(const ullong & v) {initType(v);} - //! Set variant content and type to float + //! \~english Set variant content and type to float + //! \~russian Устанавливает значение и тип из вещественного числа void setValue(const float & v) {initType(v);} - //! Set variant content and type to double + //! \~english Set variant content and type to double + //! \~russian Устанавливает значение и тип из вещественного числа void setValue(const double & v) {initType(v);} - //! Set variant content and type to long double + //! \~english Set variant content and type to long double + //! \~russian Устанавливает значение и тип из вещественного числа void setValue(const ldouble & v) {initType(v);} - //! Set variant content and type to bit array + //! \~english Set variant content and type to bit array + //! \~russian Устанавливает значение и тип из массива битов void setValue(const PIBitArray & v) {initType(v);} - //! Set variant content and type to byte array + //! \~english Set variant content and type to byte array + //! \~russian Устанавливает значение и тип из массива байтов void setValue(const PIByteArray & v) {initType(v);} - //! Set variant content and type to string + //! \~english Set variant content and type to string + //! \~russian Устанавливает значение и тип из строки void setValue(const PIString & v) {initType(v);} - //! Set variant content and type to strings list + //! \~english Set variant content and type to strings list + //! \~russian Устанавливает значение и тип из массива строк void setValue(const PIStringList & v) {initType(v);} - //! Set variant content and type to time + //! \~english Set variant content and type to time + //! \~russian Устанавливает значение и тип из времени void setValue(const PITime & v) {initType(v);} - //! Set variant content and type to date + //! \~english Set variant content and type to date + //! \~russian Устанавливает значение и тип из даты void setValue(const PIDate & v) {initType(v);} - //! Set variant content and type to date and time + //! + //! \~english Set variant content and type to date and time + //! \~russian Устанавливает значение и тип из даты и времени void setValue(const PIDateTime & v) {initType(v);} - //! Set variant content and type to system time + //! \~english Set variant content and type to system time + //! \~russian Устанавливает значение и тип из системного времени void setValue(const PISystemTime & v) {initType(v);} - //! Set variant content and type to enum + //! \~english Set variant content and type to enum + //! \~russian Устанавливает значение и тип из перечисления void setValue(const PIVariantTypes::Enum & v) {initType(v);} - //! Set variant content and type to file + //! \~english Set variant content and type to file + //! \~russian Устанавливает значение и тип из файла void setValue(const PIVariantTypes::File & v) {initType(v);} - //! Set variant content and type to dir + //! \~english Set variant content and type to dir + //! \~russian Устанавливает значение и тип из директории void setValue(const PIVariantTypes::Dir & v) {initType(v);} - //! Set variant content and type to color + //! \~english Set variant content and type to color + //! \~russian Устанавливает значение и тип из цвета void setValue(const PIVariantTypes::Color & v) {initType(v);} - //! Set variant content and type to IODevice + //! \~english Set variant content and type to IODevice + //! \~russian Устанавливает значение и тип из IODevice void setValue(const PIVariantTypes::IODevice & v) {initType(v);} - //! Set variant content and type to point + //! \~english Set variant content and type to point + //! \~russian Устанавливает значение и тип из точки void setValue(const PIPointd & v) {initType(v);} - //! Set variant content and type to rect + //! \~english Set variant content and type to rect + //! \~russian Устанавливает значение и тип из прямоугольника void setValue(const PIRectd & v) {initType(v);} - //! Set variant content and type to line + //! \~english Set variant content and type to line + //! \~russian Устанавливает значение и тип из линии void setValue(const PILined & v) {initType(v);} - //! Set variant content and type to math vector + //! \~english Set variant content and type to math vector + //! \~russian Устанавливает значение и тип из вектора void setValue(const PIMathVectord & v) {initType(v);} - //! Set variant content and type to math matrix + //! \~english Set variant content and type to math matrix + //! \~russian Устанавливает значение и тип из матрицы void setValue(const PIMathMatrixd & v) {initType(v);} - //! Set current value from string without change type + //! \~english Set current value from string without change type + //! \~russian Устанавливает текущее значение из строки без изменения типа void setValueFromString(const PIString & v); @@ -472,102 +560,189 @@ public: PIMathMatrixd toMathMatrix() const; - /** \brief Returns variant content as custom type - * \details In case of known types this function equivalent \a to function. \n - * Otherwise returns content as type T. */ + //! \~\brief + //! \~english Returns variant content as custom type + //! \~russian Возвращает содержимое в качестве своего типа + //! \~\details + //! \~english + //! In case of known types this function equivalent \a to function. \n + //! Otherwise returns content as type T only if this type was set earlier. + //! \~russian + //! Для стандартных типов эквиваленстно методу \a to. \n + //! Для других возвращает тип T только если он был установлен ранее. template T value() const {return getAsValue(*this);} - //! Assign operator + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const PIVariant & v); - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(PIVariant && v); - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const char * v) {setValue(PIString(v)); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const bool v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const char v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const uchar v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const short v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const ushort v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const int & v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const uint & v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const llong & v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const ullong & v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const float & v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const double & v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const ldouble & v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const PIBitArray & v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const PIByteArray & v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const PIString & v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const PIStringList & v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const PITime & v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const PIDate & v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const PIDateTime & v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const PISystemTime & v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const PIVariantTypes::Enum & v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const PIVariantTypes::File & v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const PIVariantTypes::Dir & v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const PIVariantTypes::Color & v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const PIVariantTypes::IODevice & v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const PIPointd & v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const PIRectd & v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const PILined & v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const PIMathVectord & v) {setValue(v); return *this;} - //! Assign operator + + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariant & operator =(const PIMathMatrixd & v) {setValue(v); return *this;} - //! Compare operator + //! \~english Compare operator. Check type and content. + //! \~russian Оператор сравнения. Сравнивает тип и содержимое. bool operator ==(const PIVariant & v) const; - //! Compare operator + + //! \~english Compare operator. Check type and content. + //! \~russian Оператор сравнения. Сравнивает тип и содержимое. bool operator !=(const PIVariant & v) const {return !(*this == v);} - //! Returns type of variant content + //! \~english Returns type of variant content. + //! \~russian Возвращает тип значения. PIVariant::Type type() const {return _type;} - //! Returns type name of variant content + //! \~english Returns type name of variant content. + //! \~russian Возвращает имя типа значения. PIString typeName() const; - //! Returns \b true if type is not Invalid + //! \~english Returns if type is not \a pivInvalid. + //! \~russian Возвращает не является ли тип \a pivInvalid. bool isValid() const {return _type != PIVariant::pivInvalid;} + //! \~english Swaps with other %PIVariant. + //! \~russian Меняет с другим %PIVariant. void swap(PIVariant & v); - /** \brief Returns new variant from custom type - * \details In case of known types this function equivalent \a PIVariant(T) constructors. \n - * Otherwise returns variant with content \a v and type Custom. */ + //! \~\brief + //! \~english Returns new %PIVariant from custom type value. + //! \~russian Возвращает новый %PIVariant из значения своего типа. + //! \~\details + //! \~english + //! In case of known types this function equivalent \a PIVariant() constructors. \n + //! Otherwise returns variant with content "v" and type \a pivCustom. + //! \~russian + //! Для стандартных типов эквиваленстно конструктору \a PIVariant(). \n + //! Для других устанавливает содержимое из "v" и тип \a pivCustom. template static PIVariant fromValue(const T & v) { PIVariant ret; @@ -596,10 +771,12 @@ public: } - //! Returns type from name + //! \~english Returns type from its name. + //! \~russian Возвращает тип из его названия. static PIVariant::Type typeFromName(const PIString & tname); - //! Returns type name + //! \~english Returns type name. + //! \~russian Возвращает имя типа. static PIString typeName(PIVariant::Type type); private: @@ -808,6 +985,9 @@ BINARY_STREAM_READ(PIVariant) { return s; } +//! \relatesalso PICout +//! \~english Output operator to \a PICout +//! \~russian Оператор вывода в \a PICout inline PICout operator <<(PICout s, const PIVariant & v) { s.space(); s.saveAndSetControls(0); s << "PIVariant(" << v.typeName(); diff --git a/libs/main/core/pivariantsimple.h b/libs/main/core/pivariantsimple.h index 59d746bd..cdd14fa8 100644 --- a/libs/main/core/pivariantsimple.h +++ b/libs/main/core/pivariantsimple.h @@ -1,7 +1,7 @@ /*! \file pivariantsimple.h * \ingroup Core * \brief - * \~english Variant simple type + * \~english Simple variant type * \~russian Простой вариативный тип */ /* @@ -62,9 +62,28 @@ public: }; +//! \addtogroup Core +//! \{ +//! \~\class PIVariantSimple pivariantsimple.h +//! \~\brief +//! \~english Simple variant type. +//! \~russian Простой вариативный тип. +//! +//! \~\details +//! \~english +//! +//! \~russian +//! +//! \} class PIVariantSimple { public: + + //! \~english Construct null %PIVariantSimple + //! \~russian Создает пустой %PIVariantSimple PIVariantSimple() {ptr = 0; f = 0;} + + //! \~english Contructs a copy of %PIVariantSimple. + //! \~russian Создает копию %PIVariantSimple. PIVariantSimple(const PIVariantSimple & v) { ptr = 0; f = v.f; @@ -73,6 +92,8 @@ public: } ~PIVariantSimple() {destroy();} + //! \~english Assign operator. + //! \~russian Оператор присваивания. PIVariantSimple & operator=(const PIVariantSimple & v) { destroy(); f = v.f; @@ -81,6 +102,8 @@ public: return *this; } + //! \~english Set value to "v". + //! \~russian Устанавливает значение в "v". template void setValue(const T & v) { if (f) { @@ -94,6 +117,18 @@ public: f->newT(ptr, (const void *)&v); } + //! \~\brief + //! \~english Returns value as type "T". + //! \~russian Возвращает значение как тип "T". + //! \~\details + //! \~english + //! In contrast of PIVariant this class has strong check of type. + //! Returns value only if this type was set before. + //! + //! \~russian + //! В отличии от PIVariant этот класс строго проверяет типы. + //! Возвращает значение только если этот же тип был установлен ранее. + //! template T value() const { if (!f) return T(); @@ -102,6 +137,8 @@ public: return *(T*)(ptr); } + //! \~english Returns %PIVariantSimple with value "v". + //! \~russian Возвращает %PIVariantSimple со значением "v". template static PIVariantSimple fromValue(const T & v) { PIVariantSimple ret; diff --git a/libs/main/core/pivarianttypes.cpp b/libs/main/core/pivarianttypes.cpp index cd823373..c967bbc0 100644 --- a/libs/main/core/pivarianttypes.cpp +++ b/libs/main/core/pivarianttypes.cpp @@ -23,8 +23,9 @@ # include "piiodevice.h" #endif + int PIVariantTypes::Enum::selectedValue() const { - piForeachC (Enumerator & e, enum_list) + for (const auto & e: enum_list) if (e.name == selected) return e.value; return 0; @@ -32,7 +33,7 @@ int PIVariantTypes::Enum::selectedValue() const { bool PIVariantTypes::Enum::selectValue(int v) { - piForeachC (Enumerator & e, enum_list) + for (const auto & e: enum_list) if (e.value == v) { selected = e.name; return true; @@ -42,7 +43,7 @@ bool PIVariantTypes::Enum::selectValue(int v) { bool PIVariantTypes::Enum::selectName(const PIString & n) { - piForeachC (Enumerator & e, enum_list) + for (const auto & e: enum_list) if (e.name == n) { selected = e.name; return true; @@ -52,7 +53,7 @@ bool PIVariantTypes::Enum::selectName(const PIString & n) { int PIVariantTypes::Enum::value(const PIString & n) const { - piForeachC (Enumerator & e, enum_list) + for (const auto & e: enum_list) if (e.name == n) return e.value; return 0; @@ -60,7 +61,7 @@ int PIVariantTypes::Enum::value(const PIString & n) const { PIString PIVariantTypes::Enum::name(int v) const { - piForeachC (Enumerator & e, enum_list) + for (const auto & e: enum_list) if (e.value == v) return e.name; return PIString(); @@ -69,7 +70,7 @@ PIString PIVariantTypes::Enum::name(int v) const { PIVector PIVariantTypes::Enum::values() const { PIVector ret; - piForeachC (Enumerator & e, enum_list) + for (const auto & e: enum_list) ret << e.value; return ret; } @@ -77,7 +78,7 @@ PIVector PIVariantTypes::Enum::values() const { PIStringList PIVariantTypes::Enum::names() const { PIStringList ret; - piForeachC (Enumerator & e, enum_list) + for (const auto & e: enum_list) ret << e.name; return ret; } @@ -144,14 +145,14 @@ PIVariantTypes::Enum & PIVariantTypes::Enum::operator <<(const PIString & v) { if (enum_list.isEmpty()) { enum_list << Enumerator(0, v); } else { - enum_list << Enumerator(enum_list.back().value+1, v); + enum_list << Enumerator(enum_list.back().value + 1, v); } return *this; } PIVariantTypes::Enum & PIVariantTypes::Enum::operator <<(const PIStringList & v) { - piForeachC (PIString & s, v) + for (const auto & s: v) (*this) << s; return *this; } diff --git a/libs/main/core/pivarianttypes.h b/libs/main/core/pivarianttypes.h index 21986830..8c8bcd04 100644 --- a/libs/main/core/pivarianttypes.h +++ b/libs/main/core/pivarianttypes.h @@ -32,148 +32,281 @@ class PIPropertyStorage; +//! \ingroup Core +//! \relatesalso PIVariant +//! \~english Namespace contains several types for PIVariant +//! \~russian Пространство имен содержит некоторые типы для PIVariant namespace PIVariantTypes { -/** - * \brief name-value pair - */ + +//! \addtogroup Core +//! \{ +//! \~\struct Enumerator pivarianttypes.h +//! \~\brief +//! \~english Name-value pair. +//! \~russian Пара имя-значение. +//! \} struct PIP_EXPORT Enumerator { Enumerator(int v = 0, const PIString & n = PIString()): value(v), name(n) {} + + //! \~english Value. + //! \~russian Значение. int value; + + //! \~english Name. + //! \~russian Имя. PIString name; }; -/** - * \brief Collection of PIVariantTypes::Enumerator. It's replace classic c-style enum. - * Contains elements with unique name and not uniqueue values. - */ + +//! \addtogroup Core +//! \{ +//! \~\struct Enum pivarianttypes.h +//! \~\brief +//! \~english Collection of PIVariantTypes::Enumerator. +//! \~russian Набор PIVariantTypes::Enumerator. +//! \~\details +//! \~english +//! This class represents classic c-style enum. +//! Contains elements with unique names and not uniqueue values, also +//! name of enum and selected member. +//! +//! \~russian +//! Этот класс представляет классический c-style enum. +//! Содержит элементы с уникальными именами и неуникальными значениями, +//! а также имя перечисления и выбранного элемента. +//! +//! \} struct PIP_EXPORT Enum { Enum(const PIString & n = PIString()): enum_name(n) {} - /** - * \brief Find selected value. - * @return selected value, otherwrise 0 - */ + //! \~english Returns selected value, or 0 if there is no name in members. + //! \~russian Возвращает выбранное значение, или 0, если выбранного имени нет в элементах. int selectedValue() const; - /** - * \brief Get selected name - * @return selected name, otherwrise empty PIString - */ + //! \~english Returns selected name. + //! \~russian Возвращает выбранное имя. PIString selectedName() const {return selected;} - /** - * \brief Select value if exists in Enum. If Enum contains several PIVariantTypes::Enumerator with same values, - * first PIVariantTypes::Enumerator will selected - * @param v value for selection - * @return true if value exists in Enum, false otherwrise - */ + //! \~\brief + //! \~english Select value if exists in Enum. + //! \~russian Выбирает значение, если оно существует в Enum. + //! + //! \~\details + //! \~english + //! If Enum contains several PIVariantTypes::Enumerator with same values, + //! first PIVariantTypes::Enumerator will selected. + //! Returns if value exists in Enum. + //! + //! \~russian + //! Если Enum содержит несколько PIVariantTypes::Enumerator с этим значением, + //! то будет выбран первый. + //! Возвращает существовал ли такой Enum. + //! bool selectValue(int v); - /** - * \brief Select name if exists in enum - * @param n name for selection - * @return true if name exists in Enum, false otherwrise - */ + //! \~\brief + //! \~english Select name if exists in Enum. + //! \~russian Выбирает имя, если оно существует в Enum. + //! + //! \~\details + //! \~english + //! Returns if name exists in Enum. + //! + //! \~russian + //! Возвращает существовал ли такой Enum. + //! bool selectName(const PIString & n); - /** - * \brief Find PIVariantTypes::Enumerator with specific name and return it value - * @param n name for search - * @return value of founded PIVariantTypes::Enumerator, 0 otherwrise - */ + //! \~english Find PIVariantTypes::Enumerator with name "n" and return it value, otherwise 0. + //! \~russian Ищет PIVariantTypes::Enumerator с именем "n" и возвращает его значение, иначе 0. int value(const PIString & n) const; - /** - * \brief Find first PIVariantTypes::Enumerator with specific value and return it name - * @param v value for search - * @return name of founded PIVariantTypes::Enumerator, empty string otherwrise - */ + //! \~english Find PIVariantTypes::Enumerator with value "v" and return it name, otherwise empty string. + //! \~russian Ищет PIVariantTypes::Enumerator со значением "v" и возвращает его имя, иначе пустую строку. PIString name(int v) const; - /** - * \brief Make vector of Enum values - */ + //! \~english Returns all members values. + //! \~russian Возвращает все значения членов. PIVector values() const; - /** - * \brief Make vector of Enum names - */ + //! \~english Returns all members names. + //! \~russian Возвращает все имена членов. PIStringList names() const; - /** - * \brief Add PIVariantTypes::Enumerator to Enum - */ + //! \~english Add PIVariantTypes::Enumerator to Enum. + //! \~russian Добавляет в Enum PIVariantTypes::Enumerator. Enum & operator <<(const Enumerator & v); - /** - * \brief Add PIVariantTypes::Enumerator element to Enum. Element contains specific name and value more per - * unit then last element. If the is no elements, contains zero value. - * @param v name for new PIVariantTypes::Enumerator element - */ + //! \~english Add PIVariantTypes::Enumerator with name "v" and value of last element + 1, otherwise 0. + //! \~russian Добавляет PIVariantTypes::Enumerator с именем "v" и значением последнего элемента + 1, иначе 0. Enum & operator <<(const PIString & v); - /** - * \brief Add PIVariantTypes::Enumerator element for each name in vector - */ + //! \~english Add PIVariantTypes::Enumerator element for each name of vector. + //! \~russian Добавляет PIVariantTypes::Enumerator для каждой строки из массива. Enum & operator <<(const PIStringList & v); - /** - * \brief Return true if Enum is empty - */ + //! \~english Returns if Enum is empty. + //! \~russian Возвращает пустой ли Enum. bool isEmpty() const {return enum_list.isEmpty();} + + //! \~english Name of Enum. + //! \~russian Имя Enum. PIString enum_name; + + //! \~english Name of selected element. + //! \~russian Имя выбранного элемента. PIString selected; + + //! \~english Members. + //! \~russian Элементы. PIVector enum_list; }; + +//! \addtogroup Core +//! \{ +//! \~\struct File pivarianttypes.h +//! \~\brief +//! \~english File location description. +//! \~russian Описание положения файла. +//! \} struct PIP_EXPORT File { File(const PIString & p = PIString(), const PIString & f = PIString(), bool abs = false, bool save_mode = false): file(p), filter(f), is_abs(abs), is_save(save_mode) {} + + //! \~english Returns path. + //! \~russian Возвращает путь. PIString toString() const {return file;} + + //! \~english Path. + //! \~russian Путь. PIString file; + + //! \~english Name filter. + //! \~russian Фильтр имени. PIString filter; + + //! \~english If path is absolute. + //! \~russian Абсолютный ли путь. bool is_abs; + + //! \~english If save is available. + //! \~russian Доступно ли сохранение. bool is_save; }; + +//! \addtogroup Core +//! \{ +//! \~\struct Dir pivarianttypes.h +//! \~\brief +//! \~english Directory description. +//! \~russian Описание директории. +//! \} struct PIP_EXPORT Dir { Dir(const PIString & d = PIString(), bool abs = false): dir(d), is_abs(abs) {} + + //! \~english Returns path. + //! \~russian Возвращает путь. PIString toString() const {return dir;} + + //! \~english Path. + //! \~russian Путь. PIString dir; + + //! \~english If path is absolute. + //! \~russian Абсолютный ли путь. bool is_abs; }; + +//! \addtogroup Core +//! \{ +//! \~\struct Color pivarianttypes.h +//! \~\brief +//! \~english 32-bits color. +//! \~russian 32-битный цвет. +//! \} struct PIP_EXPORT Color { Color(uint v = 0) {rgba = v;} + + //! \~english Integer color. + //! \~russian Целочисленный цвет. uint rgba; }; + +//! \addtogroup Core +//! \{ +//! \~\struct IODevice pivarianttypes.h +//! \~\brief +//! \~english Input/output device description. +//! \~russian Описание устройства ввода/вывода. +//! \} struct PIP_EXPORT IODevice { IODevice(); + + //! \~english Serialize "ps" and set it to "props". + //! \~russian Сериализует "ps" и устанавливает "props". void set(const PIPropertyStorage & ps); + + //! \~english Deserialize "props" and returns it. + //! \~russian Десериализует "props" и возвращает свойства. PIPropertyStorage get() const; + + //! \~english Returns string for PICout. + //! \~russian Возвращает строку для PICout. PIString toPICout() const; + + //! \~english PIIODevice prefix, see \ref PIIODevice_sec7. + //! \~russian Префикс PIIODevice, см. \ref PIIODevice_sec7. PIString prefix; - int mode; // PIIODevice::DeviceMode - int options; // PIIODevice::DeviceOptions + + //! PIIODevice::DeviceMode. + int mode; + + //! PIIODevice::DeviceOptions. + int options; + + //! \~english Serialized properties. + //! \~russian Сериализованные свойства. PIByteArray props; }; } + +//! \relatesalso PICout +//! \~english Output operator to \a PICout +//! \~russian Оператор вывода в \a PICout inline PICout operator <<(PICout s, const PIVariantTypes::Enumerator & v) {s << v.name << "(" << v.value << ")"; return s;} +//! \relatesalso PICout +//! \~english Output operator to \a PICout +//! \~russian Оператор вывода в \a PICout inline PICout operator <<(PICout s, const PIVariantTypes::Enum & v) {s << "Enum(" << v.selectedValue() << "=" << v.selectedName() << ")"; return s;} +//! \relatesalso PICout +//! \~english Output operator to \a PICout +//! \~russian Оператор вывода в \a PICout inline PICout operator <<(PICout s, const PIVariantTypes::File & v) {s << "File(\"" << v.file << "\")"; return s;} +//! \relatesalso PICout +//! \~english Output operator to \a PICout +//! \~russian Оператор вывода в \a PICout inline PICout operator <<(PICout s, const PIVariantTypes::Dir & v) {s << "Dir(\"" << v.dir << "\")"; return s;} +//! \relatesalso PICout +//! \~english Output operator to \a PICout +//! \~russian Оператор вывода в \a PICout inline PICout operator <<(PICout s, const PIVariantTypes::Color & v) {s.saveControls(); s << PICoutManipulators::Hex << "Color(#" << v.rgba << ")"; s.restoreControls(); return s;} +//! \relatesalso PICout +//! \~english Output operator to \a PICout +//! \~russian Оператор вывода в \a PICout inline PICout operator <<(PICout s, const PIVariantTypes::IODevice & v) {s << v.toPICout(); return s;}