1 <!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.0.1 Transitional//EN">
5 <meta http-equiv=
"Content-Type" content=
"text/html; charset=ISO-8859-1">
6 <title>Boost.Flyweight Documentation - Factories reference
</title>
7 <link rel=
"stylesheet" href=
"../style.css" type=
"text/css">
8 <link rel=
"start" href=
"../index.html">
9 <link rel=
"prev" href=
"tags.html">
10 <link rel=
"up" href=
"index.html">
11 <link rel=
"next" href=
"holders.html">
15 <h1><img src=
"../../../../boost.png" alt=
"Boost logo" align=
16 "middle" width=
"277" height=
"86">Boost.Flyweight
17 Factories reference
</h1>
19 <div class=
"prev_link"><a href=
"tags.html"><img src=
"../prev.gif" alt=
"tags" border=
"0"><br>
22 <div class=
"up_link"><a href=
"index.html"><img src=
"../up.gif" alt=
"Boost.Flyweight reference" border=
"0"><br>
23 Boost.Flyweight reference
25 <div class=
"next_link"><a href=
"holders.html"><img src=
"../next.gif" alt=
"holders" border=
"0"><br>
27 </a></div><br clear=
"all" style=
"clear: all;">
34 <li><a href=
"#factory">Factories and factory specifiers
</a></li>
35 <li><a href=
"#factory_tag_synopsis">Header
36 <code>"boost/flyweight/factory_tag.hpp"</code> synopsis
</a>
38 <li><a href=
"#is_factory">Class template
<code>is_factory
</code></a></li>
39 <li><a href=
"#factory_construct">Class template
<code>factory
</code></a></li>
42 <li><a href=
"#hashed_factory_fwd_synopsis">Header
43 <code>"boost/flyweight/hashed_factory_fwd.hpp"</code> synopsis
</a>
45 <li><a href=
"#hashed_factory_synopsis">Header
46 <code>"boost/flyweight/hashed_factory.hpp"</code> synopsis
</a>
48 <li><a href=
"#hashed_factory_class">Class template
<code>hashed_factory_class
</code></a></li>
49 <li><a href=
"#hashed_factory">Class template
<code>hashed_factory
</code></a></li>
52 <li><a href=
"#set_factory_fwd_synopsis">Header
53 <code>"boost/flyweight/set_factory_fwd.hpp"</code> synopsis
</a>
55 <li><a href=
"#set_factory_synopsis">Header
56 <code>"boost/flyweight/set_factory.hpp"</code> synopsis
</a>
58 <li><a href=
"#set_factory_class">Class template
<code>set_factory_class
</code></a></li>
59 <li><a href=
"#set_factory">Class template
<code>set_factory
</code></a></li>
62 <li><a href=
"#assoc_container_factory_fwd_synopsis">Header
63 <code>"boost/flyweight/assoc_container_factory_fwd.hpp"</code> synopsis
</a>
65 <li><a href=
"#assoc_container_factory_synopsis">Header
66 <code>"boost/flyweight/assoc_container_factory.hpp"</code> synopsis
</a>
68 <li><a href=
"#assoc_container_factory_class">Class template
<code>assoc_container_factory_class
</code></a></li>
69 <li><a href=
"#assoc_container_factory">Class template
<code>assoc_container_factory
</code></a></li>
74 <h2><a name=
"factory">Factories and factory specifiers
</a></h2>
77 Given a type
<code>Key
</code> and an
78 <a href=
"http://www.sgi.com/tech/stl/Assignable.html"><code>Assignable
</code></a>
79 type
<code>Entry
</code> implicitly convertible to
<code>const Key
&</code>, a
80 <i>factory of
<code>Entry
</code> elements
</i> (implicitly associated to
81 <code>Key
</code>) is a
82 <a href=
"http://www.sgi.com/tech/stl/DefaultConstructible.html"><code>Default
83 Constructible
</code></a> entity able to store and retrieve immutable elements of
84 type
<code>Entry
</code>. A factory is governed by an associated equivalence
85 relation defined on
<code>Key
</code> so that no two
86 <code>Entry
</code> objects convertible to equivalent
<code>Key
</code>s
87 can be stored simultaneously in the factory. Different factory types can
88 use different equivalence relations.
92 In the following table,
<code>Factory
</code> is a factory of elements
93 of type
<code>Entry
</code>,
<code>f
</code> denotes an object of type
<code>Factory
</code>,
94 <code>x
</code> is an object of type
<code>Entry
</code> and
<code>h
</code> is a
95 value of
<code>Factory::handle_type
</code>.
99 <table cellspacing=
"0">
100 <caption><b>Factory requirements.
</b></caption>
102 <th align=
"center">expression
</th>
103 <th align=
"center">return type
</th>
104 <th align=
"center">assertion/note
<br>pre/post-condition
</th>
107 <td><code>Factory::handle_type
</code></td>
108 <td>handle to elements of type
<code>T
</code><br>
109 stored in the factory
111 <td><code>handle_type
</code> is
112 <a href=
"http://www.sgi.com/tech/stl/Assignable.html"><code>Assignable
</code></a>
114 assignment operations never throw an exception.
118 <td><code>f.insert(x);
</code></td>
119 <td><code>handle_type
</code></td>
120 <td>Inserts a copy of
<code>x
</code> if there is no equivalent entry in
<code>f
</code>;
<br>
121 returns a handle to the inserted or equivalent element.
125 <td><code>f.erase(h);
</code></td>
126 <td><code>void
</code></td>
127 <td>Erases the element associated to
<code>h
</code>.
<br>
128 This operation does not throw.
132 <td><code>f.entry(h);
</code></td>
133 <td><code>const Entry
&</code></td>
134 <td>Returns a reference to the element associated to
<code>h
</code>.
<br>
135 This operation does not throw.
142 Additionally to the basic thread safety guarantee which is implicitly assumed
143 for most classes including the majority of components of the
144 C++ standard library, it is required that the member function
<code>entry
</code>
145 can be invoked simultaneously from different threads, even in the presence
146 of concurrent accesses to
<code>insert
</code> and
<code>erase
</code> (as long
147 as the entry returned by
<code>entry
</code> is not the one which is being
152 A type
<code>S
</code> is said to be a
<i>factory specifier
</i> if:
154 <li>One of the following conditions is satisfied:
156 <li><a href=
"#is_factory"><code>is_factory
<S
>::type
</code></a> is
157 <a href=
"../../../mpl/doc/refmanual/bool.html"><code>boost::mpl::true_
</code></a>,
</li>
158 <li><code>S
</code> is of the form
<a href=
"#factory_construct"><code>factory
<S'
></code></a>.
</li>
161 <li><code>S
</code>, or
<code>S'
</code> if (b) applies, is an
162 <a href=
"../../../mpl/doc/refmanual/lambda-expression.html"><code>MPL Lambda
163 Expression
</code></a> such that invoking it with types (
<code>Entry
</code>,
164 <code>Key
</code>) resolves to a factory type of
<code>Entry
</code> elements
165 (implicitly associated to
<code>Key
</code>).
170 <h2><a name=
"factory_tag_synopsis">Header
171 <a href=
"../../../../boost/flyweight/factory_tag.hpp"><code>"boost/flyweight/factory_tag.hpp"</code></a> synopsis
</a></h2>
174 <span class=keyword
>namespace
</span> <span class=identifier
>boost
</span><span class=special
>{
</span>
176 <span class=keyword
>namespace
</span> <span class=identifier
>flyweights
</span><span class=special
>{
</span>
178 <span class=keyword
>struct
</span> <span class=identifier
>factory_marker
</span><span class=special
>;
</span>
180 <span class=keyword
>template
</span><span class=special
><</span><span class=keyword
>typename
</span> <span class=identifier
>T
</span><span class=special
>></span>
181 <span class=keyword
>struct
</span> <span class=identifier
>is_factory
</span><span class=special
>;
</span>
183 <span class=keyword
>template
</span><span class=special
><</span><span class=keyword
>typename
</span> <span class=identifier
>T
</span><span class=special
>></span>
184 <span class=keyword
>struct
</span> <span class=identifier
>factory
</span><span class=special
>;
</span>
186 <span class=special
>}
</span> <span class=comment
>// namespace boost::flyweights
</span>
188 <span class=special
>}
</span> <span class=comment
>// namespace boost
</span>
191 <h3><a name=
"is_factory">Class template
<code>is_factory
</code></a></h3>
194 Unless specialized by the user,
<code>is_factory
<T
>::type
</code> is
195 <a href=
"../../../mpl/doc/refmanual/bool.html"><code>boost::mpl::true_
</code></a>
196 if
<code>T
</code> is derived from
<code>factory_marker
</code>, and it is
197 <a href=
"../../../mpl/doc/refmanual/bool.html"><code>boost::mpl::false_
</code></a>
201 <h3><a name=
"factory_construct">Class template
<code>factory
</code></a></h3>
204 <code>factory
<T
></code> is a syntactic construct meant to indicate
205 that
<code>T
</code> is a factory specifier without resorting to the
206 mechanisms provided by the
<code>is_factory
</code> class template.
209 <h2><a name=
"hashed_factory_fwd_synopsis">Header
210 <a href=
"../../../../boost/flyweight/hashed_factory_fwd.hpp"><code>"boost/flyweight/hashed_factory_fwd.hpp"</code></a> synopsis
</a></h2>
213 <span class=keyword
>namespace
</span> <span class=identifier
>boost
</span><span class=special
>{
</span>
215 <span class=keyword
>namespace
</span> <span class=identifier
>flyweights
</span><span class=special
>{
</span>
217 <span class=keyword
>template
</span><span class=special
><</span>
218 <span class=keyword
>typename
</span> <span class=identifier
>Entry
</span><span class=special
>,
</span><span class=keyword
>typename
</span> <span class=identifier
>Key
</span><span class=special
>,
</span>
219 <span class=keyword
>typename
</span> <span class=identifier
>Hash
</span><span class=special
>=
</span><b>implementation defined
</b><span class=special
>,
</span>
220 <span class=keyword
>typename
</span> <span class=identifier
>Pred
</span><span class=special
>=
</span><b>implementation defined
</b><span class=special
>,
</span>
221 <span class=keyword
>typename
</span> <span class=identifier
>Allocator
</span><span class=special
>=
</span><b>implementation defined
</b>
222 <span class=special
>></span>
223 <span class=keyword
>class
</span> <span class=identifier
>hashed_factory_class
</span><span class=special
>;
</span>
225 <span class=keyword
>template
</span><span class=special
><</span>
226 <span class=keyword
>typename
</span> <span class=identifier
>Hash
</span><span class=special
>=
</span><b>implementation defined
</b><span class=special
>,
</span>
227 <span class=keyword
>typename
</span> <span class=identifier
>Pred
</span><span class=special
>=
</span><b>implementation defined
</b><span class=special
>,
</span>
228 <span class=keyword
>typename
</span> <span class=identifier
>Allocator
</span><span class=special
>=
</span><b>implementation defined
</b>
229 <span class=special
>></span>
230 <span class=keyword
>struct
</span> <span class=identifier
>hashed_factory
</span><span class=special
>;
</span>
232 <span class=special
>}
</span> <span class=comment
>// namespace boost::flyweights
</span>
234 <span class=special
>}
</span> <span class=comment
>// namespace boost
</span>
238 <code>hashed_factory_fwd.hpp
</code> forward declares the class templates
239 <a href=
"#hashed_factory_class"><code>hashed_factory_class
</code></a>
240 and
<a href=
"#hashed_factory"><code>hashed_factory
</code></a>.
243 <h2><a name=
"hashed_factory_synopsis">Header
244 <a href=
"../../../../boost/flyweight/hashed_factory.hpp"><code>"boost/flyweight/hashed_factory.hpp"</code></a> synopsis
</a></h2>
246 <h3><a name=
"hashed_factory_class">Class template
<code>hashed_factory_class
</code></a></h3>
249 <code>hashed_factory_class
</code> is a
<a href=
"#factory"><code>Factory
</code></a>
250 implemented with a hashed container.
254 <span class=keyword
>template
</span><span class=special
><</span>
255 <span class=keyword
>typename
</span> <span class=identifier
>Entry
</span><span class=special
>,
</span><span class=keyword
>typename
</span> <span class=identifier
>Key
</span><span class=special
>,
</span>
256 <span class=keyword
>typename
</span> <span class=identifier
>Hash
</span><span class=special
>,
</span><span class=keyword
>typename
</span> <span class=identifier
>Pred
</span><span class=special
>,
</span><span class=keyword
>typename
</span> <span class=identifier
>Allocator
</span>
257 <span class=special
>></span>
258 <span class=keyword
>class
</span> <span class=identifier
>hashed_factory_class
</span>
259 <span class=special
>{
</span>
260 <span class=keyword
>public
</span><span class=special
>:
</span>
261 <span class=keyword
>typedef
</span> <b>implementation defined
</b> <span class=identifier
>handle_type
</span><span class=special
>;
</span>
263 <span class=identifier
>handle_type
</span> <span class=identifier
>insert
</span><span class=special
>(
</span><span class=keyword
>const
</span> <span class=identifier
>Entry
</span><span class=special
>&</span> <span class=identifier
>x
</span><span class=special
>);
</span>
264 <span class=keyword
>void
</span> <span class=identifier
>erase
</span><span class=special
>(
</span><span class=identifier
>handle_type
</span> <span class=identifier
>h
</span><span class=special
>);
</span>
265 <span class=keyword
>const
</span> <span class=identifier
>Entry
</span><span class=special
>&</span> <span class=identifier
>entry
</span><span class=special
>(
</span><span class=identifier
>handle_type
</span> <span class=identifier
>h
</span><span class=special
>);
</span>
266 <span class=special
>};
</span>
270 <code>Hash
</code> is a
271 <a href=
"http://www.sgi.com/tech/stl/DefaultConstructible.html"><code>Default
272 Constructible
</code></a>
273 <a href=
"http://www.sgi.com/tech/stl/UnaryFunction.html"><code>Unary Function
</code></a>
274 taking a single argument of type
<code>Key
</code> and returning a
275 value of type
<code>std::size_t
</code> in the range
276 <code>[
0, std::numeric_limits
<std::size_t
>::max())
</code>.
277 <code>Pred
</code> is a
278 <a href=
"http://www.sgi.com/tech/stl/DefaultConstructible.html"><code>Default
279 Constructible
</code></a>
280 <a href=
"http://www.sgi.com/tech/stl/BinaryPredicate.html">
281 <code>Binary Predicate
</code></a> inducing an equivalence relation
282 on elements of
<code>Key
</code>. It is required that
283 a
<code>Hash
</code> object return the same value for objects
284 equivalent under
<code>Pred
</code>.
285 The equivalence relation on
<code>Key
</code> associated to the factory is
286 that induced by
<code>Pred
</code>.
287 The default arguments for
<code>Hash
</code> and
<code>Pred
</code> are
288 <a href=
"../../../functional/hash/index.html"><code>boost::hash
<Key
></code></a>
289 and
<code>std::equal_to
<Key
></code>, respectively.
290 <code>Allocator
</code> must be an allocator of
<code>Entry
</code> objects
291 satisfying the associated C++ requirements at
<b>[lib.allocator.requirements]
</b>.
292 The default argument is
<code>std::allocator
<Entry
></code>. The internal
293 hashed container upon which
<code>hashed_factory_class
</code> is based is
294 constructed with default initialized objects of type
<code>Hash
</code>,
295 <code>Pred
</code> and
<code>Allocator
</code>.
298 <h3><a name=
"hashed_factory">Class template
<code>hashed_factory
</code></a></h3>
301 <a href=
"#factory"><code>Factory Specifier
</code></a> for
<a href=
"#hashed_factory_class"><code>hashed_factory_class
</code></a>.
305 <span class=keyword
>template
</span><span class=special
><</span><span class=keyword
>typename
</span> <span class=identifier
>Hash
</span><span class=special
>,
</span><span class=keyword
>typename
</span> <span class=identifier
>Pred
</span><span class=special
>,
</span><span class=keyword
>typename
</span> <span class=identifier
>Allocator
</span><span class=special
>></span>
306 <span class=keyword
>struct
</span> <span class=identifier
>hashed_factory
</span><span class=special
>;
</span>
310 <code>hashed_factory
<Hash,Pred,Allocator
></code> is an
311 <a href=
"../../../mpl/doc/refmanual/metafunction-class.html"><code>MPL Metafunction
312 Class
</code></a> such that the type
316 <span class=identifier
>boost
</span><span class=special
>::
</span><span class=identifier
>mpl
</span><span class=special
>::
</span><span class=identifier
>apply
</span><span class=special
><</span>
317 <span class=identifier
>hashed_factory
</span><span class=special
><</span><span class=identifier
>Hash
</span><span class=special
>,
</span><span class=identifier
>Pred
</span><span class=special
>,
</span><span class=identifier
>Allocator
</span><span class=special
>>,
</span>
318 <span class=identifier
>Entry
</span><span class=special
>,
</span><span class=identifier
>Key
</span>
319 <span class=special
>>::
</span><span class=identifier
>type
</span>
327 <span class=identifier
>boost
</span><span class=special
>::
</span><span class=identifier
>mpl
</span><span class=special
>::
</span><span class=identifier
>apply
</span><span class=special
><</span>
328 <span class=identifier
>hashed_factory_class
</span><span class=special
><</span><span class=identifier
>boost
</span><span class=special
>::
</span><span class=identifier
>mpl
</span><span class=special
>::
</span><span class=identifier
>_1
</span><span class=special
>,
</span><span class=identifier
>boost
</span><span class=special
>::
</span><span class=identifier
>mpl
</span><span class=special
>::
</span><span class=identifier
>_2
</span><span class=special
>,
</span><span class=identifier
>Hash
</span><span class=special
>,
</span><span class=identifier
>Pred
</span><span class=special
>,
</span><span class=identifier
>Allocator
</span><span class=special
>>,
</span>
329 <span class=identifier
>Entry
</span><span class=special
>,
</span><span class=identifier
>Key
</span>
330 <span class=special
>>::
</span><span class=identifier
>type
</span>
334 This implies that
<code>Hash
</code>,
<code>Pred
</code> and
<code>Allocator
</code>
336 <a href=
"../../../mpl/doc/refmanual/placeholder-expression.html"><code>MPL
337 Placeholder Expressions
</code></a> resolving to the actual types used by
338 <code>hashed_factory_class
</code>.
341 <h2><a name=
"set_factory_fwd_synopsis">Header
342 <a href=
"../../../../boost/flyweight/set_factory_fwd.hpp"><code>"boost/flyweight/set_factory_fwd.hpp"</code></a> synopsis
</a></h2>
345 <span class=keyword
>namespace
</span> <span class=identifier
>boost
</span><span class=special
>{
</span>
347 <span class=keyword
>namespace
</span> <span class=identifier
>flyweights
</span><span class=special
>{
</span>
349 <span class=keyword
>template
</span><span class=special
><</span>
350 <span class=keyword
>typename
</span> <span class=identifier
>Entry
</span><span class=special
>,
</span><span class=keyword
>typename
</span> <span class=identifier
>Key
</span><span class=special
>,
</span>
351 <span class=keyword
>typename
</span> <span class=identifier
>Compare
</span><span class=special
>=
</span><b>implementation defined
</b><span class=special
>,
</span>
352 <span class=keyword
>typename
</span> <span class=identifier
>Allocator
</span><span class=special
>=
</span><b>implementation defined
</b>
353 <span class=special
>></span>
354 <span class=keyword
>class
</span> <span class=identifier
>set_factory_class
</span><span class=special
>;
</span>
356 <span class=keyword
>template
</span><span class=special
><</span>
357 <span class=keyword
>typename
</span> <span class=identifier
>Compare
</span><span class=special
>=
</span><b>implementation defined
</b><span class=special
>,
</span>
358 <span class=keyword
>typename
</span> <span class=identifier
>Allocator
</span><span class=special
>=
</span><b>implementation defined
</b>
359 <span class=special
>></span>
360 <span class=keyword
>struct
</span> <span class=identifier
>set_factory
</span><span class=special
>;
</span>
362 <span class=special
>}
</span> <span class=comment
>// namespace boost::flyweights
</span>
364 <span class=special
>}
</span> <span class=comment
>// namespace boost
</span>
368 <code>set_factory_fwd.hpp
</code> forward declares the class templates
369 <a href=
"#set_factory_class"><code>set_factory_class
</code></a>
370 and
<a href=
"#set_factory"><code>set_factory
</code></a>.
373 <h2><a name=
"set_factory_synopsis">Header
374 <a href=
"../../../../boost/flyweight/set_factory.hpp"><code>"boost/flyweight/set_factory.hpp"</code></a> synopsis
</a></h2>
376 <h3><a name=
"set_factory_class">Class template
<code>set_factory_class
</code></a></h3>
379 <code>set_factory_class
</code> is a
<a href=
"#factory"><code>Factory
</code></a>
380 implemented on top of an orderded associative container.
384 <span class=keyword
>template
</span><span class=special
><</span>
385 <span class=keyword
>typename
</span> <span class=identifier
>Entry
</span><span class=special
>,
</span><span class=keyword
>typename
</span> <span class=identifier
>Key
</span><span class=special
>,
</span>
386 <span class=keyword
>typename
</span> <span class=identifier
>Compare
</span><span class=special
>,
</span><span class=keyword
>typename
</span> <span class=identifier
>Allocator
</span>
387 <span class=special
>></span>
388 <span class=keyword
>class
</span> <span class=identifier
>set_factory_class
</span>
389 <span class=special
>{
</span>
390 <span class=keyword
>public
</span><span class=special
>:
</span>
391 <span class=keyword
>typedef
</span> <b>implementation defined
</b> <span class=identifier
>handle_type
</span><span class=special
>;
</span>
393 <span class=identifier
>handle_type
</span> <span class=identifier
>insert
</span><span class=special
>(
</span><span class=keyword
>const
</span> <span class=identifier
>Entry
</span><span class=special
>&</span> <span class=identifier
>x
</span><span class=special
>);
</span>
394 <span class=keyword
>void
</span> <span class=identifier
>erase
</span><span class=special
>(
</span><span class=identifier
>handle_type
</span> <span class=identifier
>h
</span><span class=special
>);
</span>
395 <span class=keyword
>const
</span> <span class=identifier
>Entry
</span><span class=special
>&</span> <span class=identifier
>entry
</span><span class=special
>(
</span><span class=identifier
>handle_type
</span> <span class=identifier
>h
</span><span class=special
>);
</span>
396 <span class=special
>};
</span>
400 <code>Compare
</code> is a
401 <a href=
"http://www.sgi.com/tech/stl/DefaultConstructible.html"><code>Default
402 Constructible
</code></a>
403 <a href=
"http://www.sgi.com/tech/stl/StrictWeakOrdering.html">
404 <code>Strict Weak Ordering
</code></a> on
<code>Key
</code>. Two
<code>Key
</code>s
405 <code>x
</code> and
<code>y
</code> are considered equivalent if
406 <code>!c(x,y)
&&!c(y,x)
</code> for
<code>c
</code> of type
<code>Compare
</code>.
407 The default argument of
<code>Compare
</code> is
<code>std::less
<Key
></code>
408 <code>Allocator
</code> must be an allocator of
<code>Entry
</code> objects
409 satisfying the associated C++ requirements at
<b>[lib.allocator.requirements]
</b>.
410 The default argument is
<code>std::allocator
<Entry
></code>. The internal
411 container upon which
<code>set_factory_class
</code> is based is
412 constructed with default initialized objects of type
<code>Compare
</code>
413 and
<code>Allocator
</code>.
416 <h3><a name=
"set_factory">Class template
<code>set_factory
</code></a></h3>
419 <a href=
"#factory"><code>Factory Specifier
</code></a> for
<a href=
"#set_factory_class"><code>set_factory_class
</code></a>.
423 <span class=keyword
>template
</span><span class=special
><</span><span class=keyword
>typename
</span> <span class=identifier
>Compare
</span><span class=special
>,
</span><span class=keyword
>typename
</span> <span class=identifier
>Allocator
</span><span class=special
>></span>
424 <span class=keyword
>struct
</span> <span class=identifier
>set_factory
</span><span class=special
>;
</span>
428 <code>set_factory
<Compare,Allocator
></code> is an
429 <a href=
"../../../mpl/doc/refmanual/metafunction-class.html"><code>MPL Metafunction
430 Class
</code></a> such that the type
434 <span class=identifier
>boost
</span><span class=special
>::
</span><span class=identifier
>mpl
</span><span class=special
>::
</span><span class=identifier
>apply
</span><span class=special
><</span>
435 <span class=identifier
>set_factory
</span><span class=special
><</span><span class=identifier
>Compare
</span><span class=special
>,
</span><span class=identifier
>Allocator
</span><span class=special
>>,
</span>
436 <span class=identifier
>Entry
</span><span class=special
>,
</span><span class=identifier
>Key
</span>
437 <span class=special
>>::
</span><span class=identifier
>type
</span>
445 <span class=identifier
>boost
</span><span class=special
>::
</span><span class=identifier
>mpl
</span><span class=special
>::
</span><span class=identifier
>apply
</span><span class=special
><</span>
446 <span class=identifier
>set_factory_class
</span><span class=special
><</span><span class=identifier
>boost
</span><span class=special
>::
</span><span class=identifier
>mpl
</span><span class=special
>::
</span><span class=identifier
>_1
</span><span class=special
>,
</span><span class=identifier
>boost
</span><span class=special
>::
</span><span class=identifier
>mpl
</span><span class=special
>::
</span><span class=identifier
>_2
</span><span class=special
>,
</span><span class=identifier
>Compare
</span><span class=special
>,
</span><span class=identifier
>Allocator
</span><span class=special
>>,
</span>
447 <span class=identifier
>Entry
</span><span class=special
>,
</span><span class=identifier
>Key
</span>
448 <span class=special
>>::
</span><span class=identifier
>type
</span>
452 This implies that
<code>Compare
</code> and
<code>Allocator
</code>
454 <a href=
"../../../mpl/doc/refmanual/placeholder-expression.html"><code>MPL
455 Placeholder Expressions
</code></a> resolving to the actual types used by
456 <code>set_factory_class
</code>.
459 <h2><a name=
"assoc_container_factory_fwd_synopsis">Header
460 <a href=
"../../../../boost/flyweight/assoc_container_factory_fwd.hpp"><code>"boost/flyweight/assoc_container_factory_fwd.hpp"</code></a> synopsis
</a></h2>
463 <span class=keyword
>namespace
</span> <span class=identifier
>boost
</span><span class=special
>{
</span>
465 <span class=keyword
>namespace
</span> <span class=identifier
>flyweights
</span><span class=special
>{
</span>
467 <span class=keyword
>template
</span><span class=special
><</span><span class=keyword
>typename
</span> <span class=identifier
>Container
</span><span class=special
>></span>
468 <span class=keyword
>class
</span> <span class=identifier
>assoc_container_factory_class
</span><span class=special
>;
</span>
470 <span class=keyword
>template
</span><span class=special
><</span><span class=keyword
>typename
</span> <span class=identifier
>ContainerSpecifier
</span><span class=special
>></span>
471 <span class=keyword
>struct
</span> <span class=identifier
>assoc_container_factory
</span><span class=special
>;
</span>
473 <span class=special
>}
</span> <span class=comment
>// namespace boost::flyweights
</span>
475 <span class=special
>}
</span> <span class=comment
>// namespace boost
</span>
479 <code>assoc_container_factory_fwd.hpp
</code> forward declares the class templates
480 <a href=
"#assoc_container_factory_class"><code>assoc_container_factory_class
</code></a>
481 and
<a href=
"#assoc_container_factory"><code>assoc_container_factory
</code></a>.
484 <h2><a name=
"assoc_container_factory_synopsis">Header
485 <a href=
"../../../../boost/flyweight/assoc_container_factory.hpp"><code>"boost/flyweight/assoc_container_factory.hpp"</code></a> synopsis
</a></h2>
487 <h3><a name=
"assoc_container_factory_class">Class template
<code>assoc_container_factory_class
</code></a></h3>
490 <code>assoc_container_factory_class
</code> wraps a suitable associative container
491 to provide a
<a href=
"#factory"><code>Factory
</code></a> interface.
495 <span class=keyword
>template
</span><span class=special
><</span><span class=keyword
>typename
</span> <span class=identifier
>Container
</span><span class=special
>></span>
496 <span class=keyword
>class
</span> <span class=identifier
>assoc_container_factory_class
</span>
497 <span class=special
>{
</span>
498 <span class=keyword
>public
</span><span class=special
>:
</span>
499 <span class=keyword
>typedef
</span> <span class=keyword
>typename
</span> <span class=identifier
>Container
</span><span class=special
>::
</span><span class=identifier
>iterator
</span> <span class=identifier
>handle_type
</span><span class=special
>;
</span>
501 <span class=identifier
>handle_type
</span> <span class=identifier
>insert
</span><span class=special
>(
</span><span class=keyword
>const
</span> <span class=keyword
>typename
</span> <span class=identifier
>Container
</span><span class=special
>::
</span><span class=identifier
>value_type
</span><span class=special
>&</span> <span class=identifier
>x
</span><span class=special
>);
</span>
502 <span class=keyword
>void
</span> <span class=identifier
>erase
</span><span class=special
>(
</span><span class=identifier
>handle_type
</span> <span class=identifier
>h
</span><span class=special
>);
</span>
503 <span class=keyword
>const
</span> <span class=keyword
>typename
</span> <span class=identifier
>Container
</span><span class=special
>::
</span><span class=identifier
>value_type
</span><span class=special
>&</span> <span class=identifier
>entry
</span><span class=special
>(
</span><span class=identifier
>handle_type
</span> <span class=identifier
>h
</span><span class=special
>);
</span>
504 <span class=special
>};
</span>
508 <code>Container
</code> must be an (ordered or unordered) associative container
511 <li><code>Container::key_type
</code> is the same as
512 <code>Container::value_type
</code> (which is the entry type associated to
515 <li>Unique keys (rather than equivalent keys) are supported.
</li>
516 <li><code>Container
</code> is
<i>stable
</i>, i.e. its iterators are not
517 invalidated upon insert or erase operations.
</li>
519 The equivalence relation associated to
<code>assoc_container_factory_class
</code>
520 is the one induced by
<code>Container
</code>. If equivalence of elements
521 of
<code>Container::value_type
</code> is determined solely on the basis of a
522 type
<code>value_type'
</code> to which
<code>value_type
</code> is
523 implicitly convertible, then
<code>assoc_container_factory_class
</code> is
524 a factory of entries of type
<code>value_type
</code> implicitly associated to
525 <code>value_type'
</code>. For example, the instantiation
529 <span class=identifier
>assoc_container_factory_class
</span><span class=special
><</span>
530 <span class=identifier
>std
</span><span class=special
>::
</span><span class=identifier
>set
</span><span class=special
><</span><span class=identifier
>derived
</span><span class=special
>,
</span><span class=identifier
>std
</span><span class=special
>::
</span><span class=identifier
>less
</span><span class=special
><</span><span class=identifier
>base
</span><span class=special
>></span> <span class=special
>></span> <span class=comment
>// derived inherits from base
</span>
531 <span class=special
>></span>
535 is a factory of
<code>derived
</code> elements implicitly associated to
539 <h3><a name=
"assoc_container_factory">Class template
<code>assoc_container_factory
</code></a></h3>
542 <a href=
"#factory"><code>Factory Specifier
</code></a> for
<a href=
"#assoc_container_factory_class"><code>assoc_container_factory_class
</code></a>.
546 <span class=keyword
>template
</span><span class=special
><</span><span class=keyword
>typename
</span> <span class=identifier
>ContainerSpecifier
</span><span class=special
>></span>
547 <span class=keyword
>struct
</span> <span class=identifier
>assoc_container_factory
</span><span class=special
>;
</span>
551 <code>ContainerSpecifier
</code> must be an
552 <a href=
"../../../mpl/doc/refmanual/lambda-expression.html"><code>MPL Lambda
553 Expression
</code></a> resolving, when invoked with (
<code>Entry
</code>,
554 <code>Key
</code>), to a type
<code>Container
</code> such that
555 <code>assoc_container_factory_class
<Container
></code> is a factory
556 of
<code>Entry
</code> elements implicitly associated to
<code>Key
</code>.
561 <div class=
"prev_link"><a href=
"tags.html"><img src=
"../prev.gif" alt=
"tags" border=
"0"><br>
564 <div class=
"up_link"><a href=
"index.html"><img src=
"../up.gif" alt=
"Boost.Flyweight reference" border=
"0"><br>
565 Boost.Flyweight reference
567 <div class=
"next_link"><a href=
"holders.html"><img src=
"../next.gif" alt=
"holders" border=
"0"><br>
569 </a></div><br clear=
"all" style=
"clear: all;">
573 <p>Revised August
13th
2008</p>
575 <p>© Copyright
2006-
2008 Joaqu
ín M L
ópez Mu
ñoz.
576 Distributed under the Boost Software
577 License, Version
1.0. (See accompanying file
<a href=
"../../../../LICENSE_1_0.txt">
578 LICENSE_1_0.txt
</a> or copy at
<a href=
"http://www.boost.org/LICENSE_1_0.txt">
579 http://www.boost.org/LICENSE_1_0.txt
</a>)