translate comments

This commit is contained in:
f1yegor 2017-04-17 13:56:55 +02:00 committed by alexey-milovidov
parent dcb5371844
commit b51c6e7592
17 changed files with 144 additions and 144 deletions

View File

@ -15,8 +15,8 @@ namespace ErrorCodes
}
/** Тип - состояние агрегатной функции.
* Параметры типа - это агрегатная функция, типы её аргументов и её параметры (для параметрических агрегатных функций).
/** Type - the state of the aggregate function.
* Type parameters is an aggregate function, the types of its arguments, and its parameters (for parametric aggregate functions).
*/
class DataTypeAggregateFunction final : public IDataType
{
@ -41,7 +41,7 @@ public:
DataTypePtr clone() const override { return std::make_shared<DataTypeAggregateFunction>(function, argument_types, parameters); }
/// NOTE Эти две функции сериализации одиночных значений несовместимы с функциями ниже.
/// NOTE These two functions for serializing single values are incompatible with the functions below.
void serializeBinary(const Field & field, WriteBuffer & ostr) const override;
void deserializeBinary(Field & field, ReadBuffer & istr) const override;

View File

@ -11,11 +11,11 @@ namespace DB
class DataTypeArray final : public IDataType
{
private:
/// Расширенный тип элементов массивов.
/// Extended type of array elements.
DataTypeTraits::EnrichedDataTypePtr enriched_nested;
/// Тип элементов массивов.
/// The type of array elements.
DataTypePtr nested;
/// Тип смещений.
/// Type of offsets.
DataTypePtr offsets;
public:
@ -54,25 +54,25 @@ public:
void serializeTextCSV(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override;
void deserializeTextCSV(IColumn & column, ReadBuffer & istr, const char delimiter) const override;
/** Потоковая сериализация массивов устроена по-особенному:
* - записываются/читаются элементы, уложенные подряд, без размеров массивов;
* - размеры записываются/читаются в отдельный столбец,
* и о записи/чтении размеров должна позаботиться вызывающая сторона.
* Это нужно, так как при реализации вложенных структур, несколько массивов могут иметь общие размеры.
/** Streaming serialization of arrays is arranged in a special way:
* - elements placed in a row are written/read without array sizes;
* - the sizes are written/read in a separate column,
* and the caller must take care of writing/reading the sizes.
* This is necessary, because when implementing nested structures, several arrays can have common sizes.
*/
/** Записать только значения, без размеров. Вызывающая сторона также должна куда-нибудь записать смещения. */
/** Write only values, without dimensions. The caller also needs to record the offsets somewhere. */
void serializeBinaryBulk(const IColumn & column, WriteBuffer & ostr, size_t offset, size_t limit) const override;
/** Прочитать только значения, без размеров.
* При этом, в column уже заранее должны быть считаны все размеры.
/** Read only values, without dimensions.
* In this case, all the sizes must already be read in the column beforehand.
*/
void deserializeBinaryBulk(IColumn & column, ReadBuffer & istr, size_t limit, double avg_value_size_hint) const override;
/** Записать размеры. */
/** Write the dimensions. */
void serializeOffsets(const IColumn & column, WriteBuffer & ostr, size_t offset, size_t limit) const;
/** Прочитать размеры. Вызывайте этот метод перед чтением значений. */
/** Read the dimensions. Call this method before reading the values. */
void deserializeOffsets(IColumn & column, ReadBuffer & istr, size_t limit) const;
ColumnPtr createColumn() const override;

View File

@ -7,13 +7,13 @@
namespace DB
{
/** Хранит набор пар (имя, тип) для вложенной структуры данных.
* Используется только при создании таблицы. Во всех остальных случаях не используется, так как раскрывается в набор отдельных столбцов с типами.
/** Stores a set of pairs (name, type) for the nested data structure.
* Used only when creating a table. In all other cases, it is not used, since it is expanded into a set of individual columns with types.
*/
class DataTypeNested final : public IDataTypeDummy
{
private:
/// Имена и типы вложенных массивов.
/// Names and types of nested arrays.
NamesAndTypesListPtr nested;
public:
@ -29,12 +29,12 @@ public:
const NamesAndTypesListPtr & getNestedTypesList() const { return nested; }
static std::string concatenateNestedName(const std::string & nested_table_name, const std::string & nested_field_name);
/// Возвращает префикс имени до первой точки '.'. Или имя без изменений, если точки нет.
/// Returns the prefix of the name to the first '.'. Or the name is unchanged if there is no dot.
static std::string extractNestedTableName(const std::string & nested_name);
/// Возвращает суффикс имени после первой точки справа '.'. Или имя без изменений, если точки нет.
/// Returns the name suffix after the first dot on the right '.'. Or the name is unchanged if there is no dot.
static std::string extractNestedColumnName(const std::string & nested_name);
/// Создает новый список в котором колонки типа Nested заменены на несколько вида имя_колонки.имя_вложенной_ячейки
/// Creates a new list in which Nested-type columns are replaced by several columns form of `column_name.cell_name`
static NamesAndTypesListPtr expandNestedColumns(const NamesAndTypesList & names_and_types);
};

View File

@ -6,8 +6,8 @@
namespace DB
{
/** Реализует часть интерфейса IDataType, общую для всяких чисел
* - ввод и вывод в текстовом виде.
/** Implements part of the IDataType interface, common to all numbers
* - input and output in text form.
*/
template <typename T>
class DataTypeNumberBase : public IDataType

View File

@ -6,8 +6,8 @@
namespace DB
{
/** Тип данных, соответствующий множеству значений в секции IN.
* Используется только как промежуточный вариант при вычислении выражений.
/** The data type corresponding to the set of values in the IN section.
* Used only as an intermediate option when evaluating expressions.
*/
class DataTypeSet final : public IDataTypeDummy
{

View File

@ -6,10 +6,10 @@
namespace DB
{
/** Тип данных - кортеж.
* Используется как промежуточный результат при вычислении выражений.
* Также может быть использовать в качестве столбца - результата выполнения запроса.
* Не может быть сохранён в таблицы.
/** Tuple data type.
* Used as an intermediate result when evaluating expressions.
* Also can be used as a column - the result of the query execution.
* Can not be saved to tables.
*/
class DataTypeTuple final : public IDataType
{
@ -35,15 +35,15 @@ public:
void deserializeTextJSON(IColumn & column, ReadBuffer & istr) const override;
void serializeTextXML(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override;
/// Кортежи в формате CSV будем сериализовать, как отдельные столбцы (то есть, теряя их вложенность в кортеж).
/// Tuples in CSV format will be serialized as separate columns (that is, losing their nesting in the tuple).
void serializeTextCSV(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override;
void deserializeTextCSV(IColumn & column, ReadBuffer & istr, const char delimiter) const override;
void serializeBinaryBulk(const IColumn & column, WriteBuffer & ostr, size_t offset, size_t limit) const override;
/** limit обязательно должен быть в точности равен количеству сериализованных значений.
* Именно из-за этого (невозможности читать меньший кусок записанных данных), Tuple не могут быть использованы для хранения данных в таблицах.
* (Хотя могут быть использованы для передачи данных по сети в Native формате.)
/** `limit` must be exactly equal to the number of serialized values.
* It is because of this (the inability to read a smaller piece of recorded data) that Tuple can not be used to store data in tables.
* (Although they can be used to transfer data over a network in Native format.)
*/
void deserializeBinaryBulk(IColumn & column, ReadBuffer & istr, size_t limit, double avg_value_size_hint) const override;

View File

@ -10,8 +10,8 @@ class IDataType;
using DataTypePtr = std::shared_ptr<IDataType>;
/** Для заданного значения Field возвращает минимальный тип данных, позволяющий хранить значение этого типа.
* В случае, если Field - массив, конвертирует все элементы к общему типу.
/** For a given value, Field returns the minimum data type that allows this value to be stored.
* In case Field is an array, converts all elements to a common type.
*/
class FieldToDataType : public StaticVisitor<DataTypePtr>
{

View File

@ -6,10 +6,10 @@
namespace DB
{
/** Базовые класс для типов данных, которые не поддерживают сериализацию и десериализацию,
* а возникают лишь в качестве промежуточного результата вычислений.
/** The base class for data types that do not support serialization and deserialization,
* but arise only as an intermediate result of the calculations.
*
* То есть, этот класс используется всего лишь чтобы отличить соответствующий тип данных от других.
* That is, this class is used just to distinguish the corresponding data type from the others.
*/
class IDataTypeDummy : public IDataType
{

View File

@ -10,45 +10,45 @@ namespace Poco { class Logger; }
namespace DB
{
/** Позволяет создавать "облачные таблицы".
* Список таких таблиц хранится в ZooKeeper.
* Все серверы, ссылающиеся на один путь в ZooKeeper, видят один и тот же список таблиц.
* CREATE, DROP, RENAME атомарны.
/** Allows you to create "cloud tables".
* A list of such tables is stored in ZooKeeper.
* All servers that refer to the same path in ZooKeeper see the same list of tables.
* CREATE, DROP, RENAME are atomic.
*
* Для БД задаётся уровень репликации N.
* При записи в "облачную" таблицу, некоторым образом выбирается N живых серверов в разных датацентрах,
* на каждом из них создаётся локальная таблица, и в них производится запись.
* The replication level N is set for the database.
* When writing to a cloud table, N live servers are selected in some way in different datacenters,
* on each of them a local table is created, and data is written to them.
*
* Движок имеет параметры: Cloud(zookeeper_path, replication_factor, datacenter_name)
* Пример: Cloud('/clickhouse/clouds/production/', 3, 'FIN')
* The engine has the parameters: Cloud(zookeeper_path, replication_factor, datacenter_name)
* Example: Cloud('/clickhouse/clouds/production/', 3, 'FIN')
*
* Структура в ZooKeeper:
* Structure in ZooKeeper:
*
* cloud_path - путь к "облаку"; может существовать несколько разных независимых облаков
/table_definitions - множество уникальных определений таблиц, чтобы не писать их много раз для большого количества таблиц
/hash128 -> sql - отображение: хэш от определения таблицы (идентификатор) -> само определение таблицы в виде CREATE запроса
/tables - список таблиц
/database_name - имя базы данных
* cloud_path - the path to the "cloud"; There may be several different independent clouds
/table_definitions - set of unique table definitions so you do not write them many times for a large number of tables
/hash128 -> sql - mapping: hash from table definition (identifier) -> table definition itself as CREATE query
/tables - list of tables
/database_name - name of the database
/name_hash_mod -> compressed_table_list
- список таблиц сделан двухуровневым, чтобы уменьшить количество узлов в ZooKeeper при наличии большого количества таблиц
- узлы создаются для каждого остатка от деления хэша от имени таблицы, например, на 4096
- и в каждом узле хранится список таблиц (имя таблицы, имя локальной таблицы, хэш от структуры, список хостов) в сжатом виде
/local_tables - список локальных таблиц, чтобы по имени локальной таблицы можно было определить её структуру
- the list of tables is made two-level to reduce the number of nodes in ZooKeeper if there are a large number of tables
- nodes are created for each remainder of the hash partition from the table name, for example, to 4096
- and each node stores a list of tables (table name, local table name, hash from structure, hosts list) in a compressed form
/local_tables - a list of local tables so that by the name of the local table you can determine its structure
/database_name
/name_hash_mod -> compressed_table_list
- список пар (хэш от имени таблицы, хэш от структуры) в сжатом виде
/locality_keys - сериализованный список ключей локальности в порядке их появления
- ключ локальности - произвольная строка
- движок БД определяет серверы для расположения данных таким образом,
чтобы, при одинаковом множестве живых серверов,
одному ключу локальности соответствовала одна группа из N серверов для расположения данных.
/nodes - список серверов, на которых зарегистрированы облачные БД с таким путём в ZK
/hostname - имя хоста
TODO /alive - эфемерная нода для предварительной проверки живости
/datacenter - имя датацентра
- list of pairs (hash from the table name, hash from the structure) in a compressed form
/locality_keys - a serialized list of locality keys in the order in which they appear
- locality key - an arbitrary string
- the database engine defines the servers for the data location in such a way,
that, with the same set of live servers,
one locality key corresponds to one group of N servers for the data location.
/nodes - the list of servers on which cloud databases are registered with the same path in ZK
/hostname - hostname
TODO /alive - an ephemeral node for pre-testing liveliness
/datacenter - the name of the data center
TODO /disk_space
* К одному облаку может относиться несколько БД, названных по-разному. Например, БД hits и visits могут относиться к одному облаку.
* For one cloud there may be more than one database named differently. For example, DB `hits` and `visits` can belong to the same cloud.
*/
class DatabaseCloud : public IDatabase
{
@ -65,11 +65,11 @@ private:
Context & context;
/** Локальные таблицы - это таблицы, находящиеся непосредственно на локальном сервере.
* Они хранят данные облачных таблиц: облачная таблица представлена несколькими локальными таблицами на разных серверах.
* Эти таблицы не видны пользователю при перечислении таблиц, хотя доступны при обращении по имени.
* Имя локальных таблиц имеет специальную форму, например, начинаться на _local, чтобы они не путались с облачными таблицами.
* Локальные таблицы загружаются лениво, при первом обращении.
/** Local tables are tables that are located directly on the local server.
* They store the data of the cloud tables: the cloud table is represented by several local tables on different servers.
* These tables are not visible to the user when listing tables, although they are available when referring by name.
* The name of the local tables has a special form, for example, start with _local so that they do not get confused with the cloud tables.
* Local tables are loaded lazily, on first access.
*/
Tables local_tables_cache;
mutable std::mutex local_tables_mutex;
@ -131,19 +131,19 @@ public:
private:
void createZookeeperNodes();
/// Получить имя узла, в котором будет храниться часть списка таблиц. (Список таблиц является двухуровневым.)
/// Get the name of the node in which the part of the list of tables will be stored. (The list of tables is two-level.)
String getNameOfNodeWithTables(const String & table_name) const;
/// Хэшировать имя таблицы вместе с именем БД.
/// Hash the table name along with the database name.
Hash getTableHash(const String & table_name) const;
/// Определения таблиц хранятся косвенным образом и адресуются своим хэшом. Вычислить хэш.
/// Table definitions are stored indirectly and addressed by its hash. Calculate the hash.
Hash getHashForTableDefinition(const String & definition) const;
/// Пойти в ZooKeeper и по хэшу получить определение таблицы.
/// Go to ZooKeeper and get a table definition by hash.
String getTableDefinitionFromHash(Hash hash) const;
/// Определить серверы, на которых будут храниться данные таблицы.
/// Define the servers on which the table data will be stored.
std::vector<String> selectHostsForTable(const String & locality_key) const;
};

View File

@ -5,22 +5,22 @@
#include <Storages/IStorage.h>
#include <Databases/IDatabase.h>
/// Общая функциональность для нескольких разных движков баз данных.
/// General functionality for several different database engines.
namespace DB
{
/** Получить строку с определением таблицы на основе запроса CREATE.
* Она представляет собой запрос ATTACH, который можно выполнить для создания таблицы, находясь в нужной БД.
* См. реализацию.
/** Get the row with the table definition based on the CREATE query.
* It is an ATTACH query that you can execute to create a table from the correspondent database.
* See the implementation.
*/
String getTableDefinitionFromCreateQuery(const ASTPtr & query);
/** Создать таблицу по её определению, без использования InterpreterCreateQuery.
* (InterpreterCreateQuery обладает более сложной функциональностью, и его нельзя использовать, если БД ещё не создана)
* Возвращает имя таблицы и саму таблицу.
/** Create a table by its definition, without using InterpreterCreateQuery.
* (InterpreterCreateQuery has more complex functionality, and it can not be used if the database has not been created yet)
* Returns the table name and the table itself.
*/
std::pair<String, StoragePtr> createTableFromDefinition(
const String & definition,

View File

@ -57,37 +57,37 @@ public:
/// Get name of database engine.
virtual String getEngineName() const = 0;
/// Загрузить множество существующих таблиц. Если задан thread_pool - использовать его.
/// Можно вызывать только один раз, сразу после создания объекта.
/// Load a set of existing tables. If thread_pool is specified, use it.
/// You can call only once, right after the object is created.
virtual void loadTables(Context & context, ThreadPool * thread_pool, bool has_force_restore_data_flag) = 0;
/// Проверить существование таблицы.
/// Check the existence of the table.
virtual bool isTableExist(const String & name) const = 0;
/// Получить таблицу для работы. Вернуть nullptr, если таблицы нет.
/// Get the table for work. Return nullptr if there is no table.
virtual StoragePtr tryGetTable(const String & name) = 0;
/// Получить итератор, позволяющий перебрать все таблицы.
/// Допустимо наличие "скрытых" таблиц, которые не видны при переборе, но видны, если получать их по имени, используя функции выше.
/// Get an iterator that allows you to pass through all the tables.
/// It is possible to have "hidden" tables that are not visible when passing through, but are visible if you get them by name using the functions above.
virtual DatabaseIteratorPtr getIterator() = 0;
/// Является ли БД пустой.
/// Is the database empty.
virtual bool empty() const = 0;
/// Добавить таблицу в базу данных. Прописать её наличие в метаданных.
/// Add the table to the database. Record its presence in the metadata.
virtual void createTable(
const String & name, const StoragePtr & table, const ASTPtr & query, const String & engine, const Settings & settings) = 0;
/// Удалить таблицу из базы данных и вернуть её. Удалить метаданные.
/// Delete the table from the database and return it. Delete the metadata.
virtual void removeTable(const String & name) = 0;
/// Добавить таблицу в базу данных, но не прописывать её в метаданных. БД может не поддерживать этот метод.
/// Add a table to the database, but do not add it to the metadata. The database may not support this method.
virtual void attachTable(const String & name, const StoragePtr & table) = 0;
/// Забыть про таблицу, не удаляя её, и вернуть её. БД может не поддерживать этот метод.
/// Forget about the table without deleting it, and return it. The database may not support this method.
virtual StoragePtr detachTable(const String & name) = 0;
/// Переименовать таблицу и, возможно, переместить таблицу в другую БД.
/// Rename the table and possibly move the table to another database.
virtual void renameTable(
const Context & context, const String & name, IDatabase & to_database, const String & to_name, const Settings & settings) = 0;
@ -96,8 +96,8 @@ public:
using ASTModifier = std::function<void(ASTPtr &)>;
/// Изменить структуру таблицы в метаданных.
/// Нужно вызывать под TableStructureLock соответствующей таблицы. Если engine_modifier пустой, то engine не изменяется.
/// Change the table structure in metadata.
/// You must call under the TableStructureLock of the corresponding table . If engine_modifier is empty, then engine does not change.
virtual void alterTable(
const Context & context,
const String & name,
@ -107,13 +107,13 @@ public:
const ColumnDefaults & column_defaults,
const ASTModifier & engine_modifier) = 0;
/// Получить запрос CREATE TABLE для таблицы. Может выдавать информацию и для detached таблиц, для которых есть метаданные.
/// Get the CREATE TABLE query for the table. It can also provide information for detached tables for which there is metadata.
virtual ASTPtr getCreateQuery(const String & name) const = 0;
/// Попросить все таблицы завершить фоновые потоки, которые они используют, и удалить все объекты таблиц.
/// Ask all tables to complete the background threads they are using and delete all table objects.
virtual void shutdown() = 0;
/// Удалить метаданные, удаление которых отличается от рекурсивного удаления директории, если такие есть.
/// Delete metadata, the deletion of which differs from the recursive deletion of the directory, if any.
virtual void drop() = 0;
virtual ~IDatabase() {}

View File

@ -83,8 +83,8 @@ public:
return dict_struct.attributes[&getAttribute(attribute_name) - attributes.data()].injective;
}
/// Во всех функциях ниже, key_columns должны быть полноценными (не константными) столбцами.
/// См. требование в IDataType.h для функций текстовой сериализации.
/// In all functions below, key_columns must be full (non-constant) columns.
/// See the requirement in IDataType.h for text-serialization functions.
#define DECLARE(TYPE)\
void get##TYPE(\
const std::string & attribute_name, const ConstColumnPlainPtrs & key_columns, const DataTypes & key_types,\

View File

@ -32,7 +32,7 @@ enum class AttributeUnderlyingType
};
/** Для неявных преобразований в функциях dictGet.
/** For implicit conversions in dictGet functions.
*/
bool isAttributeTypeConvertibleTo(AttributeUnderlyingType from, AttributeUnderlyingType to);

View File

@ -5,9 +5,9 @@
#include <unordered_map>
/** Содержит несколько иерархий регионов, загружаемых из нескольких разных файлов.
* Используется, чтобы поддержать несколько разных точек зрения о принадлежности регионов странам.
* В первую очередь, для Крыма (Российская и Украинская точки зрения).
/** Contains several hierarchies of regions, loaded from several different files.
* Used to support several different perspectives on the ownership of regions by countries.
* First of all, for the Crimea (Russian and Ukrainian points of view).
*/
class RegionsHierarchies
{
@ -17,12 +17,12 @@ private:
public:
/** path_to_regions_hierarchy_file in configuration file
* должен указывать на файл с иерархией регионов "по-умолчанию". Она будет доступна по пустому ключу.
* Кроме того, рядом ищутся файлы, к имени которых (до расширения, если есть) добавлен произвольный _suffix.
* Такие файлы загружаются, и иерархия регионов кладётся по ключу suffix.
* must point to the file with the hierarchy of regions "by default". It will be accessible by an empty key.
* In addition, a number of files are searched for, the name of which (before the extension, if any) is added arbitrary _suffix.
* Such files are loaded, and the hierarchy of regions is put on the `suffix` key.
*
* Например, если указано /opt/geo/regions_hierarchy.txt,
* то будет также загружен файл /opt/geo/regions_hierarchy_ua.txt, если такой есть - он будет доступен по ключу ua.
* For example, if /opt/geo/regions_hierarchy.txt is specified,
* then the /opt/geo/regions_hierarchy_ua.txt file will also be loaded, if any, it will be accessible by the `ua` key.
*/
RegionsHierarchies();
explicit RegionsHierarchies(const std::string & path_to_regions_hierarchy_file);
@ -31,7 +31,7 @@ public:
static bool isConfigured();
/** Перезагружает, при необходимости, все иерархии регионов.
/** Reloads, if necessary, all hierarchies of regions.
*/
void reload()
{

View File

@ -13,9 +13,9 @@
#define REGION_TYPE_CONTINENT 1
/** Класс, позволяющий узнавать, принадлежит ли регион с одним RegionID региону с другим RegionID.
* Информацию об иерархии регионов загружает из текстового файла.
* Умеет, по запросу, обновлять данные.
/** A class that lets you know if a region belongs to one RegionID region with another RegionID.
* Information about the hierarchy of regions is downloaded from a text file.
* Can on request update the data.
*/
class RegionsHierarchy : private boost::noncopyable
{
@ -27,34 +27,34 @@ private:
using RegionDepth = UInt8;
using RegionPopulation = UInt32;
/// отношение parent; 0, если родителей нет - обычная lookup таблица.
/// Relationship parent; 0, if there are no parents, the usual lookup table.
using RegionParents = std::vector<RegionID>;
/// тип региона
/// type of region
using RegionTypes = std::vector<RegionType>;
/// глубина в дереве, начиная от страны (страна: 1, корень: 0)
/// depth in the tree, starting from the country (country: 1, root: 0)
using RegionDepths = std::vector<RegionDepth>;
/// население региона. Если больше 2^32 - 1, то приравнивается к этому максимуму.
/// population of the region. If more than 2 ^ 32 - 1, then it is equated to this maximum.
using RegionPopulations = std::vector<RegionPopulation>;
/// регион -> родительский регион
/// region -> parent region
RegionParents parents;
/// регион -> город, включающий его или 0, если такого нет
/// region -> city, including it or 0, if there is none
RegionParents city;
/// регион -> страна, включающая его или 0, если такого нет
/// region -> country including it or 0, if there is none
RegionParents country;
/// регион -> область, включающая его или 0, если такой нет
/// region -> area that includes it or 0, if not
RegionParents area;
/// регион -> округ, включающий его или 0, если такого нет
/// region -> district, including it or 0, if there is none
RegionParents district;
/// регион -> континет (первый при подъёме по иерархии регионов), включающий его или 0, если такого нет
/// region -> the continent (the first when climbing in the hierarchy of regions), including it or 0, if there is none
RegionParents continent;
/// регион -> континет (последний при подъёме по иерархии регионов), включающий его или 0, если такого нет
/// region -> the continent (the latter when you climb the hierarchy of regions), including it or 0, if there is none
RegionParents top_continent;
/// регион -> население или 0, если неизвестно.
/// region -> population or 0, if unknown.
RegionPopulations populations;
/// регион - глубина в дереве
/// region - depth in the tree
RegionDepths depths;
/// path to file with data
@ -64,7 +64,7 @@ public:
RegionsHierarchy();
RegionsHierarchy(const std::string & path_);
/// Перезагружает, при необходимости, иерархию регионов. Непотокобезопасно.
/// Reloads, if necessary, the hierarchy of regions. Not threadsafe.
void reload();

View File

@ -7,14 +7,14 @@
#include <Core/StringRef.h>
/** Класс, позволяющий узнавать по id региона его текстовое название на одном из поддерживаемых языков: ru, en, ua, by, kz, tr.
/** A class that allows you to recognize by region id its text name in one of the supported languages: ru, en, ua, by, kz, tr.
*
* Информацию об именах регионов загружает из текстовых файлов с названиями следующего формата:
* Information about region names loads from text files with the following format names:
* regions_names_xx.txt,
* где xx - одно из двух буквенных обозначений следующих поддерживаемых языков:
* where xx is one of the two letters of the following supported languages:
* ru, en, ua, by, kz, tr.
*
* Умеет, по запросу, обновлять данные.
* Can on request update the data.
*/
class RegionsNames
{
@ -65,7 +65,7 @@ private:
using StringRefsForLanguageID = std::vector<StringRefs>;
public:
/** Перезагружает, при необходимости, имена регионов.
/** Reboot, if necessary, the names of regions.
*/
void reload();
void reload(const std::string & directory);
@ -112,9 +112,9 @@ private:
ModificationTimes file_modification_times = ModificationTimes(SUPPORTED_LANGUAGES_COUNT);
/// Байты имен для каждого языка, уложенные подряд, разделенные нулями
/// Bytes of names for each language, laid out in a row, separated by zeros
CharsForLanguageID chars = CharsForLanguageID(SUPPORTED_LANGUAGES_COUNT);
/// Отображение для каждого языка из id региона в указатель на диапазон байт имени
/// Mapping for each language from the region id into a pointer to the byte range of the name
StringRefsForLanguageID names_refs = StringRefsForLanguageID(SUPPORTED_LANGUAGES_COUNT);
};

View File

@ -4,9 +4,9 @@
#include <common/Types.h>
/** @brief Класс, позволяющий узнавать, принадлежит ли поисковая система или операционная система
* другой поисковой или операционной системе, соответственно.
* Информацию об иерархии регионов загружает из БД.
/** @brief Class that lets you know if a search engine or operating system belongs
* another search engine or operating system, respectively.
* Information about the hierarchy of regions is downloaded from the database.
*/
class TechDataHierarchy
{
@ -21,7 +21,7 @@ public:
static bool isConfigured();
/// Отношение "принадлежит".
/// The "belongs" relation.
bool isOSIn(UInt8 lhs, UInt8 rhs) const
{
while (lhs != rhs && os_parent[lhs])
@ -50,7 +50,7 @@ public:
}
/// К самому верхнему предку.
/// To the topmost ancestor.
UInt8 OSToMostAncestor(UInt8 x) const
{
while (os_parent[x])