Mirror reflection library 0.5.13
|
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