add a base arg to MakeSimpleAttributeChecker
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Mon, 25 Feb 2008 22:08:56 +0100
changeset 2473 24e929fe7d4c
parent 2472 ae81f8ac1854
child 2474 1d1f77782138
add a base arg to MakeSimpleAttributeChecker
src/core/attribute-helper.h
src/core/attribute.h
src/core/object-vector.cc
src/core/object-vector.h
--- a/src/core/attribute-helper.h	Mon Feb 25 22:07:19 2008 +0100
+++ b/src/core/attribute-helper.h	Mon Feb 25 22:08:56 2008 +0100
@@ -38,6 +38,7 @@
   operator Attribute () const;
 
 #define ATTRIBUTE_CHECKER_DEFINE(type)				\
+  class type##Checker : public AttributeChecker {};		\
   Ptr<const AttributeChecker> Make##type##Checker (void);	\
 
 #define ATTRIBUTE_VALUE_IMPLEMENT(type)					\
@@ -83,7 +84,7 @@
 #define ATTRIBUTE_CHECKER_IMPLEMENT(type)				\
   Ptr<const AttributeChecker> Make##type##Checker (void)		\
   {									\
-    return MakeSimpleAttributeChecker<type##Value> ();			\
+    return MakeSimpleAttributeChecker<type##Value,type##Checker> ();	\
   }									\
 
 #define ATTRIBUTE_CONVERTER_IMPLEMENT(type)				\
--- a/src/core/attribute.h	Mon Feb 25 22:07:19 2008 +0100
+++ b/src/core/attribute.h	Mon Feb 25 22:08:56 2008 +0100
@@ -92,7 +92,7 @@
   mutable uint32_t m_count;
 };
 
-template <typename T>
+template <typename T, typename BASE>
 Ptr<AttributeChecker>
 MakeSimpleAttributeChecker (void);
 
@@ -108,6 +108,13 @@
 MakePtrAccessor (Ptr<U> (T::*getter) (void) const);
 
 
+class PtrChecker : public AttributeChecker {};
+
+template <typename T>
+Ptr<AttributeChecker> MakePtrChecker (void);
+
+
+
 } // namespace ns3
 
 namespace ns3 {
@@ -342,7 +349,7 @@
 Ptr<AttributeChecker>
 MakePtrChecker (void)
 {
-  struct PtrChecker : public AttributeChecker
+  struct APtrChecker : public PtrChecker
   {
     virtual bool Check (Attribute val) const {
       const PtrValueBase *value = val.DynCast<const PtrValueBase *> ();
@@ -361,15 +368,15 @@
         }
       return true;
     }
-  } *checker = new PtrChecker ();
+  } *checker = new APtrChecker ();
   return Ptr<AttributeChecker> (checker, false);
 }
 
-template <typename T>
+template <typename T, typename BASE>
 Ptr<AttributeChecker>
 MakeSimpleAttributeChecker (void)
 {
-  struct SimpleAttributeChecker : public AttributeChecker
+  struct SimpleAttributeChecker : public BASE
   {
     virtual bool Check (Attribute value) const {
       return value.DynCast<const T *> () != 0;
--- a/src/core/object-vector.cc	Mon Feb 25 22:07:19 2008 +0100
+++ b/src/core/object-vector.cc	Mon Feb 25 22:08:56 2008 +0100
@@ -104,7 +104,7 @@
 Ptr<const AttributeChecker> 
 MakeObjectVectorChecker (void)
 {
-  return MakeSimpleAttributeChecker<ObjectVectorValue> ();
+  return MakeSimpleAttributeChecker<ObjectVectorValue,ObjectVectorChecker> ();
 }
 
 } // name
--- a/src/core/object-vector.h	Mon Feb 25 22:07:19 2008 +0100
+++ b/src/core/object-vector.h	Mon Feb 25 22:08:56 2008 +0100
@@ -42,6 +42,7 @@
 			   Ptr<U> (T::*get) (INDEX) const);
 
 
+class ObjectVectorChecker : public AttributeChecker {};
 Ptr<const AttributeChecker> MakeObjectVectorChecker (void);
 
 } // namespace ns3