Main Page | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | Directories | File List | Namespace Members | Data Fields | Globals

vector_object.cpp

Go to the documentation of this file.
00001 // See ../../license.txt for license information.
00002 //
00003 // vector_object.cpp
00004 //
00005 // 4-Jul-2003  phamilton  Created
00006 //
00007 
00008 #define REFLECT_IN_LIBRARY_SOURCE
00009 
00010 #include "vector_object.hpp"
00011 
00012 using namespace ph::reflect;
00013 
00014 bool vector_object_helper::helper_accept(const ph::common::object_base *obj, 
00015         const std::vector<ph::common::object_base *> *vector, 
00016         ph::common::object_name_visitor *visitor) const
00017 {
00018         if (!obj->nameable())
00019                 return false;
00020         if (!visitor->visit_composite(obj, obj->nameable()))
00021                 return false;
00022                 
00023         // explicit loops are simpler than using for_each.
00024         for (std::vector<ph::common::object_base *>::const_iterator i=vector->begin(); 
00025                 i != vector->end(); i++)
00026         {
00027                 // only visit the sub-object if it handles visitable.
00028                 if (!(*i)->visitable())
00029                         return false;
00030                 if (visitor->recurse())
00031                 {
00032                         if (!(*i)->visitable()->accept(visitor))
00033                                 return false;
00034                 }
00035                 else
00036                 {
00037                         if (!(*i)->nameable())
00038                                 return false;
00039                         if (!visitor->visit(*i, (*i)->nameable()))
00040                                 return false;
00041                 }
00042         }
00043         return true;
00044 }
00045 
00046 bool vector_object_helper::helper_accept(ph::common::object_base *obj, 
00047         std::vector<ph::common::object_base *> *vector, 
00048         ph::common::object_visitor *visitor)
00049 {
00050         if (!visitor->visit_composite(obj))
00051                 return false;
00052                 
00053         // explicit loops are simpler than using for_each.
00054         for (std::vector<ph::common::object_base *>::iterator i=vector->begin(); 
00055                 i != vector->end(); i++)
00056         {
00057                 // only visit the sub-object if it handles visitable.
00058                 if (!(*i)->visitable())
00059                         return false;
00060                 if (visitor->recurse())
00061                 {
00062                         if (!(*i)->visitable()->accept(visitor))
00063                                 return false;
00064                 }
00065                 else
00066                 {
00067                         if (!visitor->visit(*i))
00068                                 return false;
00069                 }
00070         }
00071         return true;
00072 }
00073 
00074 bool vector_object_helper::helper_accept(const ph::common::object_base *obj, 
00075         const std::vector<ph::common::object_base *> *vector, 
00076         ph::common::const_object_visitor *visitor) const
00077 {
00078         if (!visitor->visit_composite(obj))
00079                 return false;
00080 
00081         // explicit loops are simpler than using for_each.
00082         for (std::vector<ph::common::object_base *>::const_iterator i=vector->begin(); 
00083                 i != vector->end(); i++)
00084         {
00085                 // only visit the sub-objec if it handles visitable.
00086                 if (!(*i)->visitable())
00087                         return false;
00088                 if (visitor->recurse())
00089                 {
00090                         if (!(*i)->visitable()->accept(visitor))
00091                                 return false;
00092                 }
00093                 else
00094                 {
00095                         if (!visitor->visit(*i))
00096                                 return false;
00097                 }
00098         }
00099         return true;
00100 }

Generated on Wed Apr 5 22:03:27 2006 for cppxmlobj by  doxygen 1.4.3