add AttributeAccessor::HasGetter/HasSetter and implement it.
--- a/src/core/attribute-accessor-helper.h Fri Apr 11 11:24:42 2008 -0700
+++ b/src/core/attribute-accessor-helper.h Fri Apr 11 11:25:21 2008 -0700
@@ -102,6 +102,12 @@
v->Set (object->*m_memberVariable);
return true;
}
+ virtual bool HasGetter (void) const {
+ return true;
+ }
+ virtual bool HasSetter (void) const {
+ return true;
+ }
U T::*m_memberVariable;
};
@@ -127,6 +133,12 @@
v->Set ((object->*m_getter) ());
return true;
}
+ virtual bool HasGetter (void) const {
+ return true;
+ }
+ virtual bool HasSetter (void) const {
+ return false;
+ }
U (T::*m_getter) (void) const;
};
return Ptr<const AttributeAccessor> (new MemberMethod (getter), false);
@@ -152,6 +164,12 @@
virtual bool DoGet (const T *object, V *v) const {
return false;
}
+ virtual bool HasGetter (void) const {
+ return false;
+ }
+ virtual bool HasSetter (void) const {
+ return true;
+ }
void (T::*m_setter) (U);
};
return Ptr<const AttributeAccessor> (new MemberMethod (setter), false);
@@ -180,6 +198,12 @@
v->Set ((object->*m_getter) ());
return true;
}
+ virtual bool HasGetter (void) const {
+ return true;
+ }
+ virtual bool HasSetter (void) const {
+ return true;
+ }
void (T::*m_setter) (U);
V (T::*m_getter) (void) const;
};
--- a/src/core/attribute.h Fri Apr 11 11:24:42 2008 -0700
+++ b/src/core/attribute.h Fri Apr 11 11:25:21 2008 -0700
@@ -154,6 +154,17 @@
* valid with AttributeChecker::Check.
*/
virtual bool Get (const ObjectBase * object, Attribute attribute) const = 0;
+
+ /**
+ * \return true if this accessor supports the Get operation, false
+ * otherwise.
+ */
+ virtual bool HasGetter (void) const = 0;
+ /**
+ * \return true if this accessor supports the Set operation, false
+ * otherwise.
+ */
+ virtual bool HasSetter (void) const = 0;
};
/**
--- a/src/core/object-vector.cc Fri Apr 11 11:24:42 2008 -0700
+++ b/src/core/object-vector.cc Fri Apr 11 11:25:21 2008 -0700
@@ -101,5 +101,15 @@
}
return true;
}
+bool
+ObjectVectorAccessor::HasGetter (void) const
+{
+ return true;
+}
+bool
+ObjectVectorAccessor::HasSetter (void) const
+{
+ return false;
+}
} // name
--- a/src/core/object-vector.h Fri Apr 11 11:24:42 2008 -0700
+++ b/src/core/object-vector.h Fri Apr 11 11:25:21 2008 -0700
@@ -112,6 +112,8 @@
public:
virtual bool Set (ObjectBase * object, Attribute value) const;
virtual bool Get (const ObjectBase * object, Attribute value) const;
+ virtual bool HasGetter (void) const;
+ virtual bool HasSetter (void) const;
private:
virtual bool DoGetN (const ObjectBase *object, uint32_t *n) const = 0;
virtual Ptr<Object> DoGet (const ObjectBase *object, uint32_t i) const = 0;
--- a/src/core/pointer.h Fri Apr 11 11:24:42 2008 -0700
+++ b/src/core/pointer.h Fri Apr 11 11:25:21 2008 -0700
@@ -222,6 +222,12 @@
virtual Ptr<U> DoGet (const T *object) const {
return object->*m_memberVariable;
}
+ virtual bool HasGetter (void) const {
+ return true;
+ }
+ virtual bool HasSetter (void) const {
+ return true;
+ }
} *spec = new MemberVariable ();
spec->m_memberVariable = memberVariable;
return Ptr<const AttributeAccessor> (spec, false);
@@ -241,6 +247,12 @@
return 0;
//return (object->*m_getter) ();
}
+ virtual bool HasGetter (void) const {
+ return false;
+ }
+ virtual bool HasSetter (void) const {
+ return true;
+ }
} *spec = new MemberMethod ();
spec->m_setter = setter;
return Ptr<const AttributeAccessor> (spec, false);
@@ -259,6 +271,12 @@
virtual Ptr<U> DoGet (const T *object) const {
return (object->*m_getter) ();
}
+ virtual bool HasGetter (void) const {
+ return true;
+ }
+ virtual bool HasSetter (void) const {
+ return false;
+ }
} *spec = new MemberMethod ();
spec->m_getter = getter;
return Ptr<const AttributeAccessor> (spec, false);
@@ -285,6 +303,12 @@
virtual Ptr<U> DoGet (const T *object) const {
return (object->*m_getter) ();
}
+ virtual bool HasGetter (void) const {
+ return true;
+ }
+ virtual bool HasSetter (void) const {
+ return true;
+ }
} *spec = new MemberMethod ();
spec->m_setter = setter;
spec->m_getter = getter;