00001
00002
00003
00004
00005
00006
00007
00008 #define REFLECT_IN_LIBRARY_SOURCE
00009
00010 #include "ref_object.hpp"
00011
00012 using namespace ph::reflect;
00013
00014 bool ref_object_helper::helper_accept(const ph::common::object_base *obj,
00015 const ph::common::object_base *member, bool owned,
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 if (member)
00023 {
00024
00025 if (!member->visitable())
00026 return false;
00027
00028
00029 if (visitor->recurse() && owned)
00030 {
00031 if (!member->visitable()->accept(visitor))
00032 return false;
00033 }
00034 else
00035 {
00036 if (!member->nameable())
00037 return false;
00038 if (!visitor->visit(member, member->nameable()))
00039 return false;
00040 }
00041 }
00042 return true;
00043 }
00044
00045 bool ref_object_helper::helper_accept(ph::common::object_base *obj,
00046 ph::common::object_base *member, bool owned,
00047 ph::common::object_visitor *visitor)
00048 {
00049 if (!visitor->visit_composite(obj))
00050 return false;
00051 if (member)
00052 {
00053
00054 if (!member->visitable())
00055 return false;
00056
00057
00058 if (visitor->recurse() && owned)
00059 {
00060 if (!member->visitable()->accept(visitor))
00061 return false;
00062 }
00063 else
00064 {
00065 if (!visitor->visit(member))
00066 return false;
00067 }
00068 }
00069 return true;
00070 }
00071
00072 bool ref_object_helper::helper_accept(const ph::common::object_base *obj,
00073 const ph::common::object_base *member, bool owned,
00074 ph::common::const_object_visitor *visitor) const
00075 {
00076 if (!visitor->visit_composite(obj))
00077 return false;
00078 if (member)
00079 {
00080
00081 if (!member->visitable())
00082 return false;
00083
00084
00085 if (visitor->recurse() && owned)
00086 {
00087 if (!member->visitable()->accept(visitor))
00088 return false;
00089 }
00090 else
00091 {
00092 if (!visitor->visit(member))
00093 return false;
00094 }
00095 }
00096 return true;
00097 }