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 }