![]() |
![]() ![]() ![]() ![]() |
![]() |
Boost.Flyweight Documentation - Factories referenceBoost , , Boost.Flyweight Documentation - Reference
|
|||||||||||||||||||
| expression | return type | assertion/note pre/post-condition |
|---|---|---|
Фабрика::handle_type |
рукоятка для элементов типаТ, хранящихся на заводе |
handle_typeisНазначаемыеи его копия иоперации назначения никогда не бросают исключение. |
f.insert(x); |
handle_type |
Вставляется копияx, если вfнет эквивалентной записи;возвращает ручку в вставленный или эквивалентный элемент. |
f.erase(h); |
пустота |
Стирает элемент, связанный сh. Эта операция не бросает. |
f.entry(h); |
const Entry& |
Возвращает ссылку на элемент, связанный сh.Эта операция не бросает. |
В дополнение к основной гарантии безопасности потока, которая подразумевается для большинства классов, включая большинство компонентов стандартной библиотеки C++, требуется, чтобы функция участниказаписьмогла быть вызвана одновременно из разных потоков, даже при наличии одновременных доступов квставкеистиранию(до тех пор, пока запись, возвращеннаязапись, не является той, которая стирается).
ТипSназываетсязаводским спецификатором, если:
- это_factory::type-повышение::mpl::true_,S,S', [b],MPL Lambda Expression,Ввод,Ключ,Ключ,Ключ,Ввод,Ввод, [Ключ, [Ключ], [Ключ].is_factory<S>::typeboost::mpl::true_:Sимеет формуfactory<S'>.SилиS', если (b) применяется, являетсяMPL Lambda
Expressionтаким, что вызов его с типамиEntry,Keyразрешает фабричный типEntryэлементов (неявно связанных сKey)."boost/flyweight/factory_tag.hpp" synopsisnamespace boost{ namespace flyweights{ struct factory_marker; template<typename T> struct is_factory; template<typename T> struct factory; } // namespace boost::flyweights } // namespace boost
is_factoryЕсли пользователь не специализируется,is_factoryisboost::mpl::true_, еслиTполучен изfactory_marker, и этоboost::mpl::false_в противном случае.
factoryfactory— это синтаксическая конструкция, предназначенная для указания на то, чтоTявляется заводским спецификатором, не прибегая к механизмам, предоставляемым шаблоном классаis_factory.
"boost/flyweight/hashed_factory_fwd.hpp" synopsisnamespace boost{ namespace flyweights{ template< typename Entry,typename Key, typename Hash=implementation defined, typename Pred=implementation defined, typename Allocator=implementation defined > class hashed_factory_class; template< typename Hash=implementation defined, typename Pred=implementation defined, typename Allocator=implementation defined > struct hashed_factory; } // namespace boost::flyweights } // namespace boost
hashed_factory_fwd.hppforward объявляет шаблоны классовhashed_factory_classиhashed_factory.
"boost/flyweight/hashed_factory.hpp" synopsishashed_factory_classhashed_factory_class— этоФабрика, реализованная с хешированным контейнером.
template< typename Entry,typename Key, typename Hash,typename Pred,typename Allocator > class hashed_factory_class { public: typedef implementation defined handle_type; handle_type insert(const Entry& x); void erase(handle_type h); const Entry& entry(handle_type h); };
Хаш— это.Конструкция по умолчаниюУнарная функция, принимая один аргумент типаКлючи возвращая значение типаstd::size_tв диапазоне[0, std::numeric_limitsПредявляется.Конструкция по умолчаниюБинарный предикат, индуцирующий отношение эквивалентности на элементахКлюча. Требуется, чтобы объектHashвозвращал такое же значение для объектов, эквивалентныхPred. Отношение эквивалентности наКлюче, связанное с фабрикой, вызваноПред.иявляются.boost::hashиstd::equal_toсоответственно.Распределительдолжен быть распределителемВводобъектов, удовлетворяющих соответствующим требованиям C++ по[lib.allocator.requirements]. Аргумент по умолчаниюstd::allocator< Entry>. Внутренний хешированный контейнер, на котором основанhashed_factory_class, построен с парафированными по умолчанию объектами типаHash,PredиAllocator.
hashed_factoryФабричный спецификатордляhashed_factory_class.
template<typename Hash,typename Pred,typename Allocator> struct hashed_factory;
hashed_factoryMPL Метафункциональный класстакой, что тип
boost::mpl::apply< hashed_factory<Hash,Pred,Allocator>, Entry,Key >::type
Это то же самое, что
boost::mpl::apply< hashed_factory_class<boost::mpl::_1,boost::mpl::_2,Hash,Pred,Allocator>, Entry,Key >::type
Это означает, чтоHash,PredиAllocatorмогут бытьMPL Placeholder Expressions, разрешающими фактические типы, используемыеhashed_factory_class.
"boost/flyweight/set_factory_fwd.hpp" synopsisnamespace boost{ namespace flyweights{ template< typename Entry,typename Key, typename Compare=implementation defined, typename Allocator=implementation defined > class set_factory_class; template< typename Compare=implementation defined, typename Allocator=implementation defined > struct set_factory; } // namespace boost::flyweights } // namespace boost
set_factory_fwd.hppforward объявляет шаблоны классовset_factory_classиset_factory.
"boost/flyweight/set_factory.hpp" synopsisset_factory_classset_factory_classявляетсяЗаводреализован поверх упорядоченного ассоциативного контейнера.
template< typename Entry,typename Key, typename Compare,typename Allocator > class set_factory_class { public: typedef implementation defined handle_type; handle_type insert(const Entry& x); void erase(handle_type h); const Entry& entry(handle_type h); };
Сравнениепредставляет собойКонструктивное по умолчаниюСтрогое слабое упорядочиваниенаКлючеДваключаsxиусчитаются эквивалентными, если!c(x,y)&&x]дляcтипаСравнить. Аргументом по умолчаниюСравнитьявляетсяstd::lessРаспределительдолжен быть Распределитель. Вводобъектов, удовлетворяющих соответствующим требованиям C++ по[lib.allocator.requirements]. Аргумент по умолчаниюstd::allocator< Entry>. Внутренний контейнер, на котором основанset_factory_class, построен с начальными объектами типа по умолчаниюCompareиAllocator.
set_factoryФабричный спецификатордляset_factory_class.
template<typename Compare,typename Allocator> struct set_factory;
set_factoryпредставляет собойMPL Metafunction Class, такой, что тип
boost::mpl::apply< set_factory<Compare,Allocator>, Entry,Key >::type
Это то же самое, что
boost::mpl::apply< set_factory_class<boost::mpl::_1,boost::mpl::_2,Compare,Allocator>, Entry,Key >::type
Это означает, чтоСравнитьиРаспределительможет быть.MPL Placeholder Expressions, разрешающие фактические типы, используемыеset_factory_class.
"boost/flyweight/assoc_container_factory_fwd.hpp" synopsisnamespace boost{ namespace flyweights{ template<typename Container> class assoc_container_factory_class; template<typename ContainerSpecifier> struct assoc_container_factory; } // namespace boost::flyweights } // namespace boost
assoc_container_factory_fwd.hppвперед объявляет шаблоны классовassoc_container_factory_classиassoc_container_factory.
"boost/flyweight/assoc_container_factory.hpp" synopsisassoc_container_factory_classassoc_container_factory_classобертывает подходящий ассоциативный контейнер для обеспечения интерфейсаFactory.
template<typename Container> class assoc_container_factory_class { public: typedef typename Container::iterator handle_type; handle_type insert(const typename Container::value_type& x); void erase(handle_type h); const typename Container::value_type& entry(handle_type h); };
Контейнердолжен быть (упорядоченным или неупорядоченным) ассоциативным контейнером, таким, чтобы
Контейнер::key_typeКонтейнер::key_typeКонтейнер::value_type[скрыто].Контейнерстабильно, т.е. , т.е. , т.е. , т.е. , и т.е. , и т.д., и т.д.assoc_container_factory_class, вызываетсяContainer. Если эквивалентность элементовКонтейнера::value_typeопределяется исключительно на основе типаvalue_type', к которомуvalue_typeявляется неявно конвертируемым, тоassoc_container_factory_classявляется фабрикой записей типаvalue_type, неявно связанных сvalue_type'. Например, инстанциацияContainer::key_typeто же самое, чтоContainer::value_type(это тип входа, связанный с заводом).
Containerявляетсястабильным, т.е. его итераторы не признаются недействительными при операциях вставки или стирания.assoc_container_factory_class
is the one induced by Container. If equivalence of elements
of Container::value_type is determined solely on the basis of a
type value_type' to which value_type is
implicitly convertible, then assoc_container_factory_class is
a factory of entries of type value_type implicitly associated to
value_type'. For example, the instantiation
[ORIG_END] -->
assoc_container_factory_class< std::set<derived,std::less<base> > // derived inherits from base >
производныеэлементы, неявно связанные соснованием.
assoc_container_factoryСпецификатор заводадляassoc_container_factory_class.
template<typename ContainerSpecifier> struct assoc_container_factory;
КонтейнерСпецификатордолжен бытьMPL Lambda Expression, разрешающим, при вызове сВход,Ключ, типКонтейнертакой, чтоassoc_container_factory_classявляется фабрикойВводэлементов, неявно связанных сКлючом.
Пересмотрено 13 августа 2008 года
© Copyright 2006-2008 Joaquín M López Muñoz. Распространяется под лицензией Boost Software License, версия 1.0. (См. сопроводительный файлLICENSE_1_0.txtили копию на) http://www.boost.org/LICENSE_1_0.txt
Статья Boost.Flyweight Documentation - Factories reference раздела Boost.Flyweight Documentation - Reference может быть полезна для разработчиков на c++ и boost.
:: Главная :: Boost.Flyweight Documentation - Reference ::
реклама |