Mirror reflection library 0.5.13

mirror/doc/concepts_container.hpp

00001 
00010 #ifndef MIRROR_DOC_CONCEPTS_1011291729_HPP
00011 #define MIRROR_DOC_CONCEPTS_1011291729_HPP
00012 
00013 #include <mirror/config.hpp>
00014 #include <mirror/doc/concepts.hpp>
00015 
00016 // This section is here for documentation purposes only
00017 #ifdef MIRROR_DOCUMENTATION_ONLY
00018 
00025 MIRROR_NAMESPACE_BEGIN
00026 
00028 
00049 struct Locator
00050 {
00052     typedef BooleanConstantType safe;
00053 
00055     typedef BooleanConstantType mutating;
00056 
00058     typedef unspecified value_type;
00059 
00061     bool dereferencable(void) const;
00062 
00064     operator bool (void) const;
00065 
00067     bool operator !(void) const;
00068 
00070     value_type get(void) const;
00071 };
00072 
00074 
00079 struct MutatingLocator
00080  : public Locator
00081 {
00083     void set(value_type value) const;
00084 };
00085 
00087 
00093 struct SafeLocator
00094  : public Locator
00095 {
00096 };
00097 
00099 
00108 struct Traversal
00109 {
00111 
00116     bool done(void) const;
00117 
00119     bool empty(void) const;
00120 
00122 
00126     SafeLocator front(void) const;
00127 
00129 
00133     void step_front(void);
00134 };
00135 
00137 
00148 struct ContainerKindTag;
00149 
00151 
00157 struct MetaLocator
00158  : virtual public MetaNamedObject
00159 {
00161 
00166     typedef Range<unspecified> signature;
00167 
00169 
00172     typedef Locator locator_type;
00173 
00175 
00181     static locator_type go_to(Container container, ...);
00182 
00186     friend meta_locator_tag
00187     categorize_meta_object(MetaLocator);
00188 };
00189 
00191 
00197 struct MetaTraversal
00198  : virtual public MetaNamedObject
00199 {
00201 
00208     typedef Range<unspecified> signature;
00209 
00211     typedef Traversal traversal_type;
00212 
00214 
00220     static traversal_type start(Container container, ...);
00221 
00225     friend meta_traversal_tag
00226     categorize_meta_object(MetaTraversal);
00227 };
00228 
00230 
00236 struct MetaInserter
00237  : virtual public MetaNamedObject
00238 {
00240 
00246     typedef Range<unspecified> signature;
00247 
00249 
00255     static void insert(Container& container, ...);
00256 
00260     friend meta_inserter_tag
00261     categorize_meta_object(MetaInserter);
00262 };
00263 
00265 
00271 struct MetaEraser
00272  : virtual public MetaNamedObject
00273 {
00275 
00282     typedef Range<unspecified> signature;
00283 
00284 
00286 
00292     static void erase(Container& container, ...);
00293 
00297     friend meta_eraser_tag
00298     categorize_meta_object(MetaEraser);
00299 };
00300 
00302 
00308 struct MetaContainer
00309  : virtual public MetaScopedObject
00310 {
00312 
00315     typedef MetaScope scope;
00316 
00318     static bool empty(Container& container);
00319 
00321 
00325     static size_t size_hint(Container& container);
00326 
00328     typedef MetaType element_type;
00329 
00331     typedef MetaTraversal default_traversal;
00332 
00334 
00341     friend struct default_traversal<MetaContainer>;
00342 
00344 
00352     friend struct traversals<MetaContainer>;
00353 
00355 
00362     friend struct locators<MetaContainer>;
00363 
00365 
00373     friend struct inserters<MetaContainer>;
00374 
00376 
00384     friend struct erasers<MetaContainer>;
00385 
00389     friend meta_container_tag
00390     categorize_meta_object(MetaContainer);
00391 };
00392 
00393 MIRROR_NAMESPACE_END
00394 
00395 #endif // MIRROR_DOCUMENTATION_ONLY
00396 
00397 #endif //include guard
00398 

Copyright © 2006-2011 Matus Chochlik, University of Zilina, Zilina, Slovakia.
<matus.chochlik -at- fri.uniza.sk>
<chochlik -at -gmail.com>
Documentation generated on Fri Dec 16 2011 by Doxygen (version 1.7.3).
Important note: Although the 'boostified' version of Mirror uses the Boost C++ libraries Coding Guidelines and is implemented inside of the boost namespace, it IS NOT an officially reviewed and accepted Boost library. Mirror is being developed with the intention to be submitted for review for inclusion to the Boost C++ libraries.