add AttributeAccessor::HasGetter/HasSetter and implement it.
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Fri, 11 Apr 2008 11:25:21 -0700
changeset 2950 9e20fb862cd8
parent 2949 a42da8051124
child 2951 2a3db8645225
add AttributeAccessor::HasGetter/HasSetter and implement it.
src/core/attribute-accessor-helper.h
src/core/attribute.h
src/core/object-vector.cc
src/core/object-vector.h
src/core/pointer.h
--- 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;