Набор значений атрибутов представляет собой ассоциативный контейнер с именем атрибута в качестве ключа и указателем на объект значения атрибута в качестве отображенного типа. Это совокупность элементов с уникальными ключами, то есть в наборе может быть только одно значение атрибута с заданным именем. Что касается возможностей только для чтения, установленный интерфейс близок к<std::unordered_map>.
Набор предназначен только для добавления элементов к нему. После добавления значение атрибута не может быть удалено из набора.
Пример набора значений атрибутов может быть построен из трех наборов атрибутов. Конструктор пытается приспособить значения всех атрибутов из наборов. Возможна ситуация, когда одноимённый атрибут находится в более чем одном наборе атрибутов. Эта задача решается на построении набора ценностей: три набора атрибутов имеют разные приоритеты при решении конфликтов.
С библиотечной точки зрения три набора атрибутов источника являются глобальными, нитевидными и специфичными для источника атрибутами, причем последний имеет наивысший приоритет. Эта функция позволяет переопределять атрибуты более широких областей с более конкретными.
Ради производительности значения атрибутов не сразу приобретаются из наборов атрибутов при строительстве. Вместо этого приобретение по требованию выполняется либо по ссылке на итератор, либо по вызову метода<freeze>. После приобретения ценность атрибута остается в наборе до его разрушения. Этот нюанс не влияет на другие свойства набора, такие как размер или способность поиска. Ядро регистрации автоматически замораживает набор в нужной точке, поэтому пользователи не должны беспокоиться, если они вручную не создают наборы значений атрибутов.
Note
Наборы атрибутов, которые использовались для построения набора значений, не должны изменяться или уничтожаться до тех пор, пока набор значений не будет заморожен. В противном случае поведение не определено.
attribute_value_set
public
types
TypedefРеализация_определяетсяconst_iterator;
Тип постоянного итератора с двунаправленными возможностями.
attribute_value_set
public
construct/copy/destruct
Конструктор создает пустой набор, который может быть заполнен позже последующими вызовами методаinsert. Необязательно, объем хранилища, зарезервированный для элементов, которые должны быть вставлены, может быть передан конструктору. Построенный комплекс заморожен.
Параметры:
reserve_count
Число элементов, зарезервированных для резервирования места.
Конструктор принимает три набора атрибутов в набор значений.атрибуты source_attrsимеют наибольшее предпочтение, когда одноимённый атрибут встречается в нескольких наборах,global_attrsимеет наименьшее. Построенный комплект не замораживается.
Параметры:
global_attrs
Набор глобальных атрибутов.
reserve_count
Количество элементов для резервирования места в дополнение к элементам в предоставленных трех наборах атрибутов.
Конструктор принимает три набора атрибутов в набор значений. Атрибутыsource_attrsимеют наибольшее предпочтение, когда одноимённый атрибут встречается в нескольких наборах,global_attrsимеет наименьшее. Сконструированный набор не заморожен.
Параметры:
global_attrs
Набор глобальных атрибутов.
reserve_count
Количество элементов для резервирования места в дополнение к элементам в трех наборах атрибутов.
Конструктор принимает три набора атрибутов в набор значений.атрибуты source_attrsимеют наибольшее предпочтение, когда одноимённый атрибут встречается в нескольких наборах,global_attrsимеет наименьшее. Построенный комплект не замораживается.
Параметры:
<global_attrs>
Набор глобальных атрибутов.
<reserve_count>
Количество элементов для резервирования места в дополнение к элементам в трех наборах атрибутов.
Аvalue_refс извлеченным значением атрибута, если он найден, пустvalue_refв противном случае.
<
size_typecount(key_typekey)const;
>
Метод подсчитывает количество вхождений значений атрибутов в наборе. Поскольку может быть только одно значение атрибута с конкретным ключом, способ всегда возвращает 0 или 1.
Параметры:
<key>
Имя атрибута.
Возвращение:
Количество раз значение атрибута находится в контейнере.
voidfreeze();
Метод приобретает значения всех принятых атрибутов.
Вставляет элемент в набор. Сложность операции амортизируется постоянной.
Параметры:
<key>
Имя атрибута.
<mapped>
Значение атрибута.
Требуется:
Возвращение:
Итератор к вставленному элементу и<true>, если вставка удалась. В противном случае, если набор уже содержит одноимённое значение атрибута, итератор к существующему элементу и<false>.
Вставляет элемент в набор. Сложность операции амортизируется постоянной.
Параметры:
<value>
Имя и значение атрибута.
Требуется:
Возвращение:
Итератор к вставленному элементу и<true>, если вставка удалась. В противном случае, если набор уже содержит одноимённое значение атрибута, итератор к существующему элементу и<false>.
Способ вставки массы с возможностью приобретения итераторов к вставленным элементам. Сложность операции является линейной по отношению к числу вставленных элементов, умножая сложность заполненияитератора.
Параметры:
<begin><begin>
Передний итератор, указывающий на первый вставленный элемент.
<end>
Передний итератор, указывающий на послепоследний вставленный элемент.
<out>
Выходной итератор, который получает результаты вставки элементов.
Требуется:
Набор заморожен.
Статья Class attribute_value_set раздела Chapter 1. Boost.Log v2 Attributes может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.