| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0.1 Transitional//EN"> |
| |
| <html> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> |
| <title>Boost.Flyweight Documentation - Future work</title> |
| <link rel="stylesheet" href="style.css" type="text/css"> |
| <link rel="start" href="examples.html"> |
| <link rel="prev" href="tests.html"> |
| <link rel="up" href="index.html"> |
| <link rel="next" href="release_notes.html"> |
| </head> |
| |
| <body> |
| <h1><img src="../../../boost.png" alt="Boost logo" align= |
| "middle" width="277" height="86">Boost.Flyweight Future work</h1> |
| |
| <div class="prev_link"><a href="tests.html"><img src="prev.gif" alt="examples" border="0"><br> |
| Tests |
| </a></div> |
| <div class="up_link"><a href="index.html"><img src="up.gif" alt="index" border="0"><br> |
| Index |
| </a></div> |
| <div class="next_link"><a href="release_notes.html"><img src="next.gif" alt="release notes" border="0"><br> |
| Release notes |
| </a></div><br clear="all" style="clear: all;"> |
| <br clear="all" style="clear: all;"> |
| |
| <hr> |
| |
| <p> |
| New functionalities can be included into future releases of Boost.Flyweight |
| to meet the demands of users and to leverage upcoming C++0x features |
| and new Boost libraries. The following is a list of candidate additions. |
| </p> |
| |
| <h2>Contents</h2> |
| |
| <ul> |
| <li><a href="#instrospection">Introspection API</a></li> |
| <li><a href="#perfect_fwd">Perfect forwarding</a></li> |
| <li><a href="#rw_lock">Read/write locking policy</a></li> |
| <li><a href="#new_boost_libs">Integration with new Boost libraries</a></li> |
| </ul> |
| |
| <h2><a name="instrospection">Introspection API</a></h2> |
| |
| <p> |
| Currently there is no way to access the internal components of a |
| <code>flyweight</code> instantiation (factory, holder, etc.) or even |
| to know the types of these components. With such an API it would be |
| possible to instrument and monitor the usage of Boost.Flyweight like in |
| the following example: |
| </p> |
| |
| <blockquote><pre> |
| <span class=keyword>typedef</span> <span class=identifier>flyweight</span><span class=special><</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>string</span><span class=special>></span> <span class=identifier>fw_type</span><span class=special>;</span> |
| <span class=special>...</span> |
| <span class=identifier>std</span><span class=special>::</span><span class=identifier>cout</span><span class=special><<</span><span class=string>"factory used: "</span><span class=special><<</span><span class=keyword>typeid</span><span class=special>(</span><span class=identifier>fw_type</span><span class=special>::</span><span class=identifier>factory_type</span><span class=special>).</span><span class=identifier>name</span><span class=special>()<<</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>endl</span><span class=special>;</span> |
| <span class=identifier>std</span><span class=special>::</span><span class=identifier>cout</span><span class=special><<</span><span class=string>"values stored: "</span><span class=special><<</span><span class=identifier>fw_type</span><span class=special>::</span><span class=identifier>factory</span><span class=special>().</span><span class=identifier>size</span><span class=special>()<<</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>endl</span><span class=special>;</span> |
| </pre></blockquote> |
| |
| <h2><a name="perfect_fwd">Perfect forwarding</a></h2> |
| |
| <p> |
| When constructing a <code>flyweight<T> object</code>, some spurious copies |
| of objects of type <code>T</code> are incurred in the process of moving the value |
| into the internal factory. So-called <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2027.html#Perfect_Forwarding"><i>perfect |
| forwarding</i></a>, i.e. performing the move without generating temporary |
| copies, will be solved in an optimum manner by a new |
| type of <i>rvalue references</i> to be included in the next revision of the |
| C++ standard. Boost.Flyweight will take advantage of this feature as |
| compilers begin to provide it. |
| </p> |
| |
| <h2><a name="rw_lock">Read/write locking policy</a></h2> |
| |
| <p> |
| The nature of the flyweight pattern implies that most accesses |
| to the internal flyweight factory do not cause new insertions and can |
| thus be considered read-only. This hints at the convenience of using |
| a locking policy based on read/write locks such as those provided by |
| <a href="../../../doc/html/thread/synchronization.html#thread.synchronization.mutex_concepts.shared_lockable">Boost.Thread</a>. |
| Implementing a locking policy will also require extending the |
| <a href="reference/factories.html#factory"><code>Factory</code></a> concept |
| to allow for pure lookup operations. Tim Blechmann has provided a |
| preliminary <a href="http://lists.boost.org/Archives/boost/2008/07/139414.php">implementation</a> |
| of this idea. Before committing to this library extension it is |
| necessary to do a profiling study to determine whether read/write |
| locking actually improves performance. |
| </p> |
| |
| <h2><a name="new_boost_libs">Integration with new Boost libraries</a></h2> |
| |
| <p> |
| Recently accepted Boost libraries like |
| <a href="http://lists.boost.org/boost-announce/2007/12/0149.php">Boost.Functional/Forward</a> |
| and <a href="http://lists.boost.org/boost-announce/2007/12/0157.php">Boost.Functional/Factory</a> |
| might be used in the future to replace some internal machinery of |
| Boost.Flyweight. |
| </p> |
| |
| <hr> |
| |
| <div class="prev_link"><a href="tests.html"><img src="prev.gif" alt="examples" border="0"><br> |
| Tests |
| </a></div> |
| <div class="up_link"><a href="index.html"><img src="up.gif" alt="index" border="0"><br> |
| Index |
| </a></div> |
| <div class="next_link"><a href="release_notes.html"><img src="next.gif" alt="release notes" border="0"><br> |
| Release notes |
| </a></div><br clear="all" style="clear: all;"> |
| <br clear="all" style="clear: all;"> |
| |
| <br> |
| |
| <p>Revised September 1st 2008</p> |
| |
| <p>© Copyright 2006-2008 Joaquín M López Muñoz. |
| Distributed under the Boost Software |
| License, Version 1.0. (See accompanying file <a href="../../../LICENSE_1_0.txt"> |
| LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt"> |
| http://www.boost.org/LICENSE_1_0.txt</a>) |
| </p> |
| |
| </body> |
| </html> |