merged AI doc, some new pages

This commit is contained in:
2026-03-12 14:46:57 +03:00
parent 07ae277f9e
commit ed13838237
206 changed files with 14088 additions and 5152 deletions

View File

@@ -1,9 +1,8 @@
/*! \file pijson.h
* \ingroup Serialization
* \brief
* \~english JSON class
* \~russian Класс JSON
*/
//! \~\file pijson.h
//! \~\ingroup Serialization
//! \~\brief
//! \~english JSON tree node type
//! \~russian Тип узла дерева JSON
/*
PIP - Platform Independent Primitives
JSON class
@@ -29,174 +28,200 @@
#include "pivariant.h"
//! \ingroup Serialization
//! \~\ingroup Serialization
//! \~\brief
//! \~english JSON class.
//! \~russian Класс JSON.
//! \~english JSON tree node.
//! \~russian Узел дерева JSON.
//! \~\details
//! \~english %PIJSON class provides a tree structure for JSON data representation.
//! Each element can be a value (with name), an array, or an object.
//! \~russian Класс %PIJSON предоставляет древовидную структуру для представления данных JSON.
//! Каждый элемент может быть значением (с именем), массивом или объектом.
class PIP_EXPORT PIJSON {
friend PICout operator<<(PICout s, const PIJSON & v);
public:
//! \~english
//! Type of JSON tree element
//! \~russian
//! Тип элемента дерева JSON
//! \~english Type of JSON node.
//! \~russian Тип узла JSON.
enum Type {
Invalid /*! \~english Invalid type \~russian Недействительный тип */,
Null /*! \~english Without value, null \~russian Без значения, null */,
Boolean /*! \~english Boolean, /b true or /b false \~russian Логическое, /b true или /b false */,
Boolean /*! \~english Boolean, \b true or \b false \~russian Логическое, \b true или \b false */,
Number /*! \~english Integer or floating-point number \~russian Целое либо число с плавающей точкой */,
String /*! \~english Text \~russian Текст */,
Object /*! \~english Object, {} \~russian Объект, {} */,
Array /*! \~english Array, [] \~russian Массив, [] */
};
//! \~english
//! Generate JSON variant
//! \~russian
//! Вариант генерации JSON
//! \~english Formatting mode for JSON text output.
//! \~russian Режим форматирования JSON-текста.
enum PrintType {
Compact /*! \~english Without spaces, minimum size \~russian Без пробелов, минимальный размер */,
Tree /*! \~english With spaces and new-lines, human-readable \~russian С пробелами и новыми строками, читаемый человеком */
};
//! \~english Contructs invalid %PIJSON.
//! \~english Constructs invalid %PIJSON.
//! \~russian Создает недействительный %PIJSON.
PIJSON() {}
//! \~english Copy constructor.
//! \~russian Конструктор копирования.
PIJSON(const PIJSON & o) = default;
//! \~english Returns name of element, or empty string if it doesn`t have name.
//! \~russian Возвращает имя элемента, либо пустую строку, если имени нет.
//! \~english Returns node name, or empty string for unnamed nodes.
//! \~russian Возвращает имя узла, либо пустую строку для безымянных узлов.
const PIString & name() const { return c_name; }
//! \~english Returns elements array of this element, or empty array if element is not \a PIJSON::Array.
//! \~russian Возвращает массив элементов этого элемента, либо пустой массив, если тип элемента не \a PIJSON::Array.
//! \~english Returns array children, or an empty array when the node is not \a PIJSON::Array.
//! \~russian Возвращает дочерние элементы массива, либо пустой массив, если узел не имеет тип \a PIJSON::Array.
const PIVector<PIJSON> & array() const;
//! \~english Returns elements map of this element, or empty map if element is not \a PIJSON::Object.
//! \~russian Возвращает словарь элементов этого элемента, либо пустой словарь, если тип элемента не \a PIJSON::Object.
//! \~english Returns object members, or an empty map when the node is not \a PIJSON::Object.
//! \~russian Возвращает поля объекта, либо пустой словарь, если узел не имеет тип \a PIJSON::Object.
const PIMap<PIString, PIJSON> & object() const;
//! \~english Returns element value.
//! \~russian Возвращает значение элемента.
//! \~english Returns scalar node value.
//! \~russian Возвращает скалярное значение узла.
const PIVariant & value() const { return c_value; }
//! \~english Returns element value as bool.
//! \~russian Возвращает значение элемента как логическое.
//! \~english Returns scalar value as bool.
//! \~russian Возвращает скалярное значение как логическое.
bool toBool() const { return c_value.toBool(); }
//! \~english Returns element value as integer number.
//! \~russian Возвращает значение элемента как целое число.
//! \~english Returns scalar value as integer.
//! \~russian Возвращает скалярное значение как целое число.
int toInt() const { return c_value.toInt(); }
//! \~english Returns element value as floating-point number.
//! \~russian Возвращает значение элемента как число с плавающей точкой.
//! \~english Returns scalar value as floating-point number.
//! \~russian Возвращает скалярное значение как число с плавающей точкой.
double toDouble() const { return c_value.toDouble(); }
//! \~english Returns element value as string, valid for all types.
//! \~russian Возвращает значение элемента как строка, действительно для всех типов.
//! \~english Returns scalar value as string.
//! \~russian Возвращает скалярное значение как строку.
PIString toString() const { return c_value.toString(); }
//! \~english Returns element type.
//! \~russian Возвращает тип элемента.
//! \~english Returns node type.
//! \~russian Возвращает тип узла.
Type type() const { return c_type; }
//! \~english Returns if element is valid.
//! \~russian Возвращает действителен ли элемент.
//! \~english Returns whether the node is valid.
//! \~russian Возвращает, является ли узел действительным.
bool isValid() const { return c_type != Invalid; }
//! \~english Returns if element is \a PIJSON::Object.
//! \~russian Возвращает является ли элемент \a PIJSON::Object.
//! \~english Returns whether the node is \a PIJSON::Object.
//! \~russian Возвращает, является ли узел \a PIJSON::Object.
bool isObject() const { return c_type == Object; }
//! \~english Returns if element is \a PIJSON::Array.
//! \~russian Возвращает является ли элемент \a PIJSON::Array.
//! \~english Returns whether the node is \a PIJSON::Array.
//! \~russian Возвращает, является ли узел \a PIJSON::Array.
bool isArray() const { return c_type == Array; }
//! \~english Set value and type of element from "v".
//! \~russian Устанавливает значение и тип элемента из "v".
//! \~english Sets scalar value and updates node type for bool, numeric and string variants.
//! \~russian Устанавливает скалярное значение и обновляет тип узла для логических, числовых и строковых вариантов.
void setValue(const PIVariant & v);
//! \~english Clear element and set it to \a PIJSON::Invalid.
//! \~russian Очищает элемент и устанавливает его в \a PIJSON::Invalid.
//! \~english Clears node content and sets type to \a PIJSON::Invalid.
//! \~russian Очищает содержимое узла и устанавливает тип \a PIJSON::Invalid.
void clear();
//! \~english Returns size of elements array if type is \a PIJSON::Array, size of elements map if type is \a PIJSON::Object, otherwise
//! returns 0.
//! \~russian Возвращает размер массива элементов если тип \a PIJSON::Array, размер словаря элементов если тип \a PIJSON::Object, иначе
//! возвращает 0.
//! \~english Returns array length or object member count. Other node types return 0.
//! \~russian Возвращает длину массива или число полей объекта. Для остальных типов возвращает 0.
int size() const;
//! \~english Returns if elements map contains key "key" if type is \a PIJSON::Object, otherwise returns \b false.
//! \~russian Возвращает содержит ли словарь элементов ключ "key" если тип \a PIJSON::Object, иначе возвращает \b false.
//! \~english Returns whether an object node contains key \a key.
//! \~russian Возвращает, содержит ли узел-объект ключ \a key.
bool contains(const PIString & key) const;
//! \~english Set element type to \a PIJSON::Array and resize elements array to "new_size".
//! \~russian Устанавливает тип элемента в \a PIJSON::Array и изменяет размер массива элементов на "new_size".
//! \~english Converts node to array and resizes it. New entries become empty strings.
//! \~russian Преобразует узел в массив и изменяет его размер. Новые элементы становятся пустыми строками.
void resize(int new_size);
//! \~english Synonim of \a setValue().
//! \~english Synonym of \a setValue().
//! \~russian Аналог \a setValue().
PIJSON & operator=(const PIVariant & v) {
setValue(v);
return *this;
}
//! \~english Copy assignment operator.
//! \~russian Оператор копирующего присваивания.
PIJSON & operator=(const PIJSON & v);
//! \~english Returns element from array with index "index" if type is \a PIJSON::Array, otherwise returns invalid %PIJSON.
//! \~russian Возвращает элемент из массива по индексу "index" если тип \a PIJSON::Array, иначе возвращает недействительный %PIJSON.
//! \~english Returns array element by index, or invalid %PIJSON when the node is not an array.
//! \~russian Возвращает элемент массива по индексу, либо недействительный %PIJSON, если узел не является массивом.
const PIJSON & operator[](int index) const;
//! \~english Set element type to \a PIJSON::Array, resize if necessary and returns element from array with index "index".
//! \~russian Устанавливает тип элемента в \a PIJSON::Array, изменяет размер массива при неоходимости и возвращает элемент из массива по
//! индексу "index".
//! \~english Converts node to array, grows it when needed and returns element by index.
//! \~russian Преобразует узел в массив, при необходимости увеличивает его и возвращает элемент по индексу.
PIJSON & operator[](int index);
//! \~english Set element type to \a PIJSON::Array and add element to the end of array.
//! \~russian Устанавливает тип элемента в \a PIJSON::Array и добавляет элемент в массив.
//! \~english Converts node to array and appends another JSON node.
//! \~russian Преобразует узел в массив и добавляет другой узел JSON.
PIJSON & operator<<(const PIJSON & element);
//! \~english Set element type to \a PIJSON::Array and add element to the end of array.
//! \~russian Устанавливает тип элемента в \a PIJSON::Array и добавляет элемент в массив.
//! \~english Converts node to array and appends a scalar value.
//! \~russian Преобразует узел в массив и добавляет скалярное значение.
PIJSON & operator<<(const PIVariant & value);
//! \~english Returns element from map with key "key" if type is \a PIJSON::Object, otherwise returns invalid %PIJSON.
//! \~russian Возвращает элемент из словаря по ключу "key" если тип \a PIJSON::Object, иначе возвращает недействительный %PIJSON.
//! \~english Returns object member by key, or invalid %PIJSON when the node is not an object or the key is absent.
//! \~russian Возвращает поле объекта по ключу, либо недействительный %PIJSON, если узел не является объектом или ключ отсутствует.
PIJSON operator[](const PIString & key) const;
//! \~english Set element type to \a PIJSON::Object and returns element from map with key "key". If element with this key doesn`t
//! exists, it will be created.
//! \~russian Устанавливает тип элемента в \a PIJSON::Object и возвращает элемент из словаря по ключу "key". Если элемента с таким
//! ключом не существует, он будет создан.
//! \~english Converts node to object and returns member by key, creating it when needed.
//! \~russian Преобразует узел в объект и возвращает поле по ключу, создавая его при необходимости.
PIJSON & operator[](const PIString & key);
//! \~english Convenience overload for UTF-8 key access.
//! \~russian Вспомогательная перегрузка для доступа по UTF-8 ключу.
PIJSON operator[](const char * key) const { return (*this)[PIString::fromUTF8(key)]; }
//! \~english Convenience overload for UTF-8 key access.
//! \~russian Вспомогательная перегрузка для доступа по UTF-8 ключу.
PIJSON & operator[](const char * key) { return (*this)[PIString::fromUTF8(key)]; }
//! \~english Returns text representation of JSON tree.
//! \~russian Возвращает текстовое представление дерева JSON.
//! \~english Returns JSON text representation of the node tree.
//! \~russian Возвращает JSON-текст для дерева узлов.
PIString toJSON(PrintType print_type = Compact, bool mask_unicode = true) const;
//! \~english Parse text representation of JSON "str" and returns it root element.
//! \~russian Разбирает текстовое представление JSON "str" и возвращает его корневой элемент.
//! \~english Parses JSON text and returns the root node.
//! \~russian Разбирает JSON-текст и возвращает корневой узел.
static PIJSON fromJSON(PIString str);
//! \~english Creates an object node initialized from variant fields.
//! \~russian Создает узел-объект, инициализированный из полей вариативного словаря.
static PIJSON newObject(const PIVariantMap & fields = {});
//! \~english Creates an array node initialized from variant elements.
//! \~russian Создает узел-массив, инициализированный из вариативных элементов.
static PIJSON newArray(const PIVariantVector & fields = {});
//! \~english Creates a string node.
//! \~russian Создает строковый узел.
static PIJSON newString(const PIString & v = PIString());
//! \~english Serializes value \a v with the overload set from \a pijsonserialization.h.
//! \~russian Сериализует значение \a v через набор перегрузок из \a pijsonserialization.h.
template<typename T>
static PIJSON serialize(const T & v);
//! \~english Deserializes value of type \c T with the overload set from \a pijsonserialization.h.
//! \~russian Десериализует значение типа \c T через набор перегрузок из \a pijsonserialization.h.
template<typename T>
static T deserialize(const PIJSON & json);
private:
static PIJSON & nullEntry();
static PIString parseName(PIString & s);
@@ -230,4 +255,4 @@ inline PICout operator<<(PICout s, const PIJSON & v) {
}
#endif // PICONSTCHARS_H
#endif // PIJSON_H