introduce top-level ParamSpec for bindings.
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Wed, 13 Feb 2008 23:37:46 +0100
changeset 2410 88dc7d4a6731
parent 2409 8744ec60e8e6
child 2411 a50e95c98d3f
introduce top-level ParamSpec for bindings.
src/core/boolean-value.h
src/core/class-value-helper.h
src/core/fp-value.h
src/core/int-value.h
src/core/param-spec-helper.h
src/core/random-variable.h
src/core/uint-value.h
src/mobility/rectangle.h
src/mobility/vector.h
src/simulator/nstime.h
--- a/src/core/boolean-value.h	Wed Feb 13 22:39:17 2008 +0100
+++ b/src/core/boolean-value.h	Wed Feb 13 23:37:46 2008 +0100
@@ -24,6 +24,8 @@
   bool m_value;
 };
 
+class BooleanParamSpec : public ParamSpec {};
+
 
 template <typename T1>
 Ptr<ParamSpec> MakeBooleanParamSpec (T1 a1, bool initialValue);
@@ -40,13 +42,13 @@
 template <typename T1>
 Ptr<ParamSpec> MakeBooleanParamSpec (T1 a1, bool initialValue)
 {
-  return MakeParamSpecHelper (a1, BooleanValue (initialValue));
+  return MakeParamSpecHelper<BooleanParamSpec> (a1, BooleanValue (initialValue));
 }
 
 template <typename T1, typename T2>
 Ptr<ParamSpec> MakeBooleanParamSpec (T1 a1, T2 a2, bool initialValue)
 {
-  return MakeParamSpecHelper (a1, a2, BooleanValue (initialValue));
+  return MakeParamSpecHelper<BooleanParamSpec> (a1, a2, BooleanValue (initialValue));
 }
 
 
--- a/src/core/class-value-helper.h	Wed Feb 13 22:39:17 2008 +0100
+++ b/src/core/class-value-helper.h	Wed Feb 13 23:37:46 2008 +0100
@@ -76,19 +76,19 @@
 }
 
 
-template <typename T, typename U, typename T1>
+template <typename T, typename U, typename BASE, typename T1>
 Ptr<ParamSpec>
 MakeClassValueHelperParamSpec (T1 a1, const T &initialValue)
 {
-  return MakeParamSpecHelper (a1, ClassValue<T,U> (initialValue));
+  return MakeParamSpecHelper<BASE> (a1, ClassValue<T,U> (initialValue));
 }
 
 
-template <typename T, typename U, typename T1, typename T2>
+template <typename T, typename U, typename BASE, typename T1, typename T2>
 Ptr<ParamSpec>
 MakeClassValueHelperParamSpec (T1 a1, T2 a2, const T &initialValue)
 {
-  return MakeParamSpecHelper (a1, a2, ClassValue<T,U> (initialValue));
+  return MakeParamSpecHelper<BASE> (a1, a2, ClassValue<T,U> (initialValue));
 }
 
 } // namespace ns3
--- a/src/core/fp-value.h	Wed Feb 13 22:39:17 2008 +0100
+++ b/src/core/fp-value.h	Wed Feb 13 23:37:46 2008 +0100
@@ -25,6 +25,7 @@
   double m_value;
 };
 
+class FpParamSpec : public ParamSpec {};
 
 template <typename T1>
 Ptr<ParamSpec> MakeFpParamSpec (T1 a1,
@@ -68,36 +69,36 @@
 template <typename T1>
 Ptr<ParamSpec> 
 MakeFpParamSpec (T1 a1,
-		  double initialValue)
+		 double initialValue)
 {
-  return MakeParamSpecHelperWithChecker (a1, FpValue (initialValue),
-					 FpValueChecker::Create (a1));
+  return MakeParamSpecHelperWithChecker<FpParamSpec> (a1, FpValue (initialValue),
+						      FpValueChecker::Create (a1));
 }
 
 template <typename T1>
 Ptr<ParamSpec> MakeFpParamSpec (T1 a1,
-				 double initialValue,
-				 double minValue,
-				 double maxValue)
+				double initialValue,
+				double minValue,
+				double maxValue)
 {
-  return MakeParamSpecHelperWithChecker (a1, FpValue (initialValue),
-					 FpValueChecker (minValue, maxValue));
+  return MakeParamSpecHelperWithChecker<FpParamSpec> (a1, FpValue (initialValue),
+						      FpValueChecker (minValue, maxValue));
 }
 template <typename T1, typename T2>
 Ptr<ParamSpec> MakeFpParamSpec (T1 a1, T2 a2, 
-				 double initialValue)
+				double initialValue)
 {
-  return MakeParamSpecHelperWithChecker (a1, a2, FpValue (initialValue),
-					 FpValueChecker::Create (a1));
+  return MakeParamSpecHelperWithChecker<FpParamSpec> (a1, a2, FpValue (initialValue),
+						      FpValueChecker::Create (a1));
 }
 template <typename T1, typename T2>
 Ptr<ParamSpec> MakeFpParamSpec (T1 a1, T2 a2,
-				 double initialValue,
-				 double minValue,
-				 double maxValue)
+				double initialValue,
+				double minValue,
+				double maxValue)
 {
-  return MakeParamSpecHelperWithChecker (a1, a2, FpValue (initialValue),
-					 FpValueChecker (minValue, maxValue));
+  return MakeParamSpecHelperWithChecker<FpParamSpec> (a1, a2, FpValue (initialValue),
+						      FpValueChecker (minValue, maxValue));
 }
 
 } // namespace ns3
--- a/src/core/int-value.h	Wed Feb 13 22:39:17 2008 +0100
+++ b/src/core/int-value.h	Wed Feb 13 23:37:46 2008 +0100
@@ -24,6 +24,8 @@
   int64_t m_value;
 };
 
+class IntParamSpec : public ParamSpec {};
+
 template <typename T1>
 Ptr<ParamSpec> MakeIntParamSpec (T1 a1,
 				 int64_t initialValue);
@@ -76,8 +78,8 @@
 MakeIntParamSpec (T1 a1,
 		  int64_t initialValue)
 {
-  return MakeParamSpecHelperWithChecker (a1, IntValue (initialValue),
-					 IntValueChecker::Create (a1));
+  return MakeParamSpecHelperWithChecker<IntParamSpec> (a1, IntValue (initialValue),
+						       IntValueChecker::Create (a1));
 }
 
 template <typename T1>
@@ -86,15 +88,15 @@
 				 int64_t minValue,
 				 int64_t maxValue)
 {
-  return MakeParamSpecHelperWithChecker (a1, IntValue (initialValue),
-					 IntValueChecker (minValue, maxValue));
+  return MakeParamSpecHelperWithChecker<IntParamSpec> (a1, IntValue (initialValue),
+						       IntValueChecker (minValue, maxValue));
 }
 template <typename T1, typename T2>
 Ptr<ParamSpec> MakeIntParamSpec (T1 a1, T2 a2, 
 				 int64_t initialValue)
 {
-  return MakeParamSpecHelperWithChecker (a1, a2, IntValue (initialValue),
-					 IntValueChecker::Create (a1));
+  return MakeParamSpecHelperWithChecker<IntParamSpec> (a1, a2, IntValue (initialValue),
+						       IntValueChecker::Create (a1));
 }
 template <typename T1, typename T2>
 Ptr<ParamSpec> MakeIntParamSpec (T1 a1, T2 a2,
@@ -102,8 +104,8 @@
 				 int64_t minValue,
 				 int64_t maxValue)
 {
-  return MakeParamSpecHelperWithChecker (a1, a2, IntValue (initialValue),
-					 IntValueChecker (minValue, maxValue));
+  return MakeParamSpecHelperWithChecker<IntParamSpec> (a1, a2, IntValue (initialValue),
+						       IntValueChecker (minValue, maxValue));
 }
 
 } // namespace ns3
--- a/src/core/param-spec-helper.h	Wed Feb 13 22:39:17 2008 +0100
+++ b/src/core/param-spec-helper.h	Wed Feb 13 23:37:46 2008 +0100
@@ -3,19 +3,19 @@
 
 namespace ns3 {
 
-template <typename T1, typename V>
+template <typename BASE, typename T1, typename V>
 Ptr<ParamSpec>
 MakeParamSpecHelper (T1 a1, V initialValue);
 
-template <typename T1, typename T2, typename V>
+template <typename BASE, typename T1, typename T2, typename V>
 Ptr<ParamSpec>
 MakeParamSpecHelper (T1 a1, T2 a2, V initialValue);
 
-template <typename T1, typename V, typename CHECKER>
+template <typename BASE, typename T1, typename V, typename CHECKER>
 Ptr<ParamSpec>
 MakeParamSpecHelperWithChecker (T1 a1, V initialValue, CHECKER checker);
 
-template <typename T1, typename T2, typename V, typename CHECKER>
+template <typename BASE, typename T1, typename T2, typename V, typename CHECKER>
 Ptr<ParamSpec>
 MakeParamSpecHelperWithChecker (T1 a1, T2 a2, V initialValue, CHECKER checker);
 
@@ -29,16 +29,59 @@
 
 namespace ns3 {
 
-template <typename T, typename U, typename CHECKER>
-class ParamSpecHelper : public ParamSpec
+template <typename BASE, typename T, typename U, typename CHECKER>
+class ParamSpecHelper : public BASE
 {
 public:
-  ParamSpecHelper (PValue initialValue, CHECKER checker);
-  virtual bool Set (ObjectBase * object, PValue value) const;
-  virtual bool Get (const ObjectBase * object, PValue value) const;
-  virtual bool Check (PValue value) const;
-  virtual PValue GetInitialValue (void) const;
-  virtual PValue CreateValue (void) const;
+  ParamSpecHelper (PValue initialValue, CHECKER checker)
+  : m_initialValue (initialValue),
+    m_checker (checker) {}
+
+  virtual bool Set (ObjectBase * object, PValue val) const {
+    const U *value = val.DynCast<const U*> ();
+    if (value == 0)
+      {
+	return false;
+      }
+    T *obj = dynamic_cast<T *> (object);
+    if (obj == 0)
+      {
+	return false;
+      }
+    return DoSet (obj, value);
+  }
+
+  virtual bool Get (const ObjectBase * object, PValue val) const {
+    U *value = val.DynCast<U*> ();
+    if (value == 0)
+      {
+	return false;
+      }
+    const T *obj = dynamic_cast<const T *> (object);
+    if (obj == 0)
+      {
+	return false;
+      }
+    return DoGet (obj, value);
+  }
+
+  virtual bool Check (PValue value) const {
+    const U *val = value.DynCast<const U*> ();
+    if (val == 0)
+      {
+	return false;
+      }
+    return m_checker.Check (val->Get ());
+  }
+
+  virtual PValue GetInitialValue (void) const {
+    return m_initialValue;
+  }
+
+  virtual PValue CreateValue (void) const {
+    return m_initialValue.Copy ();
+  }
+
 
 private:
   virtual bool DoSet (T *object, const U *v) const = 0;
@@ -54,15 +97,15 @@
   bool Check (const T &value) const {return true;}
 };
 
-template <typename T, typename U, typename V, typename CHECKER>
+template <typename BASE, typename T, typename U, typename V, typename CHECKER>
 Ptr<ParamSpec>
 DoMakeParamSpecHelperOne (U T::*memberVariable, V initialValue, CHECKER checker)
 {
-  class MemberVariable : public ParamSpecHelper<T,V,CHECKER>
+  class MemberVariable : public ParamSpecHelper<BASE,T,V,CHECKER>
     {
     public:
       MemberVariable (U T::*memberVariable, V initialValue, CHECKER checker)
-	: ParamSpecHelper<T,V,CHECKER> (initialValue, checker),
+	: ParamSpecHelper<BASE,T,V,CHECKER> (initialValue, checker),
 	m_memberVariable (memberVariable)
 	{}
     private:
@@ -79,25 +122,25 @@
     };
   return Ptr<ParamSpec> (new MemberVariable (memberVariable, initialValue, checker), false);
 }
-template <typename T, typename U, typename V>
+template <typename BASE, typename T, typename U, typename V>
 Ptr<ParamSpec>
 DoMakeParamSpecHelperOne (U T::*memberVariable, V initialValue)
 {
-  return DoMakeParamSpecHelperOne (memberVariable, initialValue, ParamSpecHelperSimpleChecker<U> ());
+  return DoMakeParamSpecHelperOne<BASE> (memberVariable, initialValue, ParamSpecHelperSimpleChecker<U> ());
 }
 
 
-template <typename T, typename U, typename V, typename CHECKER>
+template <typename BASE, typename T, typename U, typename V, typename CHECKER>
 Ptr<ParamSpec>
 DoMakeParamSpecHelperOne (U (T::*getter) (void) const, 
 			  V initialValue, CHECKER checker)
 {
-  class MemberMethod : public ParamSpecHelper<T,V,CHECKER>
+  class MemberMethod : public ParamSpecHelper<BASE,T,V,CHECKER>
     {
     public:
       MemberMethod (U (T::*getter) (void) const,
 		    V initialValue, CHECKER checker)
-	: ParamSpecHelper<T,V,CHECKER> (initialValue, checker),
+	: ParamSpecHelper<BASE,T,V,CHECKER> (initialValue, checker),
 	m_getter (getter)
 	{}
     private:
@@ -113,27 +156,27 @@
   return Ptr<ParamSpec> (new MemberMethod (getter, initialValue, checker), false);
 }
 
-template <typename T, typename U, typename V>
+template <typename BASE, typename T, typename U, typename V>
 Ptr<ParamSpec>
 DoMakeParamSpecHelperOne (U (T::*getter) (void) const, 
 			  V initialValue)
 {
-  return DoMakeParamSpecHelperOne (getter, initialValue, ParamSpecHelperSimpleChecker<U> ());
+  return DoMakeParamSpecHelperOne<BASE> (getter, initialValue, ParamSpecHelperSimpleChecker<U> ());
 }
 
 
 
-template <typename T, typename U, typename V, typename CHECKER>
+template <typename BASE, typename T, typename U, typename V, typename CHECKER>
 Ptr<ParamSpec>
 DoMakeParamSpecHelperOne (void (T::*setter) (U), 
 			  V initialValue, CHECKER checker)
 {
-  class MemberMethod : public ParamSpecHelper<T,V,CHECKER>
+  class MemberMethod : public ParamSpecHelper<BASE,T,V,CHECKER>
     {
     public:
       MemberMethod (void (T::*setter) (U), 
 		    V initialValue, CHECKER checker)
-	: ParamSpecHelper<T,V,CHECKER> (initialValue, checker),
+	: ParamSpecHelper<BASE,T,V,CHECKER> (initialValue, checker),
 	m_setter (setter)
 	{}
     private:
@@ -149,30 +192,30 @@
   return Ptr<ParamSpec> (new MemberMethod (setter, initialValue, checker), false);
 }
 
-template <typename T, typename U, typename V>
+template <typename BASE, typename T, typename U, typename V>
 Ptr<ParamSpec>
 DoMakeParamSpecHelperOne (void (T::*setter) (U), 
 			  V initialValue)
 {
-  return DoMakeParamSpecHelperOne (setter, initialValue, 
-				   ParamSpecHelperSimpleChecker<typename TypeTraits<U>::ReferencedType> ());
+  return DoMakeParamSpecHelperOne<BASE> (setter, initialValue, 
+					 ParamSpecHelperSimpleChecker<typename TypeTraits<U>::ReferencedType> ());
 }
 
 
-template <typename T, typename U, typename V, typename W, typename CHECKER>
+template <typename BASE, typename T, typename U, typename V, typename W, typename CHECKER>
 Ptr<ParamSpec>
 DoMakeParamSpecHelperTwo (void (T::*setter) (U), 
 			  V (T::*getter) (void) const, 
 			  W initialValue, 
 			  CHECKER checker = ParamSpecHelperSimpleChecker<V> ())
 {
-  class MemberMethod : public ParamSpecHelper<T,W,CHECKER>
+  class MemberMethod : public ParamSpecHelper<BASE,T,W,CHECKER>
     {
     public:
       MemberMethod (void (T::*setter) (U), 
 		    V (T::*getter) (void) const,
 		    W initialValue, CHECKER checker)
-	: ParamSpecHelper<T,W,CHECKER> (initialValue, checker),
+	: ParamSpecHelper<BASE,T,W,CHECKER> (initialValue, checker),
 	m_setter (setter),
 	m_getter (getter)
 	{}
@@ -191,125 +234,60 @@
   return Ptr<ParamSpec> (new MemberMethod (setter, getter, initialValue, checker), false);
 }
 
-template <typename T, typename U, typename V, typename W>
+template <typename BASE, typename T, typename U, typename V, typename W>
 Ptr<ParamSpec>
 DoMakeParamSpecHelperTwo (void (T::*setter) (U), 
 		      V (T::*getter) (void) const, 
 		      W initialValue)
 {
-  return DoMakeParamSpecHelperTwo (setter, getter, initialValue, ParamSpecHelperSimpleChecker<V> ());
+  return DoMakeParamSpecHelperTwo<BASE> (setter, getter, initialValue, ParamSpecHelperSimpleChecker<V> ());
 }
 
-template <typename T, typename U, typename V, typename W, typename CHECKER>
+template <typename BASE, typename T, typename U, typename V, typename W, typename CHECKER>
 Ptr<ParamSpec>
 DoMakeParamSpecHelperTwo (V (T::*getter) (void) const, 
 			  void (T::*setter) (U), 
 			  W initialValue, 
 			  CHECKER checker)
 {
-  return DoMakeParamSpecHelperTwo (setter, getter, initialValue, checker);
+  return DoMakeParamSpecHelperTwo<BASE> (setter, getter, initialValue, checker);
 }
 
-template <typename T, typename U, typename V, typename W, typename CHECKER>
+template <typename BASE, typename T, typename U, typename V, typename W, typename CHECKER>
 Ptr<ParamSpec>
 DoMakeParamSpecHelperTwo (V (T::*getter) (void) const, 
 			  void (T::*setter) (U), 
 			  W initialValue)
 {
-  return DoMakeParamSpecHelperTwo (setter, getter, initialValue);
+  return DoMakeParamSpecHelperTwo<BASE> (setter, getter, initialValue);
 }
 
-
-template <typename T, typename U, typename CHECKER>
-ParamSpecHelper<T,U,CHECKER>::ParamSpecHelper (PValue initialValue, CHECKER checker)
-  : m_initialValue (initialValue),
-    m_checker (checker)
-{}
-template <typename T, typename U, typename CHECKER>
-bool 
-ParamSpecHelper<T,U,CHECKER>::Set (ObjectBase * object, PValue val) const
-{
-  const U *value = val.DynCast<const U*> ();
-  if (value == 0)
-    {
-      return false;
-    }
-  T *obj = dynamic_cast<T *> (object);
-  if (obj == 0)
-    {
-      return false;
-    }
-  return DoSet (obj, value);
-}
-template <typename T, typename U, typename CHECKER>
-bool 
-ParamSpecHelper<T,U,CHECKER>::Get (const ObjectBase * object, PValue val) const
-{
-  U *value = val.DynCast<U*> ();
-  if (value == 0)
-    {
-      return false;
-    }
-  const T *obj = dynamic_cast<const T *> (object);
-  if (obj == 0)
-    {
-      return false;
-    }
-  return DoGet (obj, value);
-}
-template <typename T, typename U, typename CHECKER>
-bool 
-ParamSpecHelper<T,U,CHECKER>::Check (PValue value) const
-{
-  const U *val = value.DynCast<const U*> ();
-  if (val == 0)
-    {
-      return false;
-    }
-  return m_checker.Check (val->Get ());
-}
-template <typename T, typename U, typename CHECKER>
-PValue
-ParamSpecHelper<T,U,CHECKER>::GetInitialValue (void) const
-{
-  return m_initialValue;
-}
-
-template <typename T, typename U, typename CHECKER>
-PValue
-ParamSpecHelper<T,U,CHECKER>::CreateValue (void) const
-{
-  return m_initialValue.Copy ();
-}
-
-
-
-template <typename T1, typename V>
+template <typename BASE, typename T1, typename V>
 Ptr<ParamSpec>
 MakeParamSpecHelper (T1 a1, V initialValue)
 {
-  return DoMakeParamSpecHelperOne (a1, initialValue);
+  return DoMakeParamSpecHelperOne<BASE> (a1, initialValue);
 }
 
-template <typename T1, typename T2, typename V>
+template <typename BASE, typename T1, typename T2, typename V>
 Ptr<ParamSpec>
 MakeParamSpecHelper (T1 a1, T2 a2, V initialValue)
 {
-  return DoMakeParamSpecHelperTwo (a1, a2, initialValue);
+  return DoMakeParamSpecHelperTwo<BASE> (a1, a2, initialValue);
 }
 
-template <typename T1, typename V, typename CHECKER>
+template <typename BASE, typename T1, typename V, typename CHECKER>
 Ptr<ParamSpec>
 MakeParamSpecHelperWithChecker (T1 a1, V initialValue, CHECKER checker)
 {
-  return DoMakeParamSpecHelperOne (a1, initialValue, checker);
+  return DoMakeParamSpecHelperOne<BASE> (a1, initialValue, checker);
 }
 
-template <typename T1, typename T2, typename V, typename CHECKER>
+template <typename BASE, typename T1, typename T2, typename V, typename CHECKER>
 Ptr<ParamSpec>
 MakeParamSpecHelperWithChecker (T1 a1, T2 a2, V initialValue, CHECKER checker)
 {
-  return DoMakeParamSpecHelperTwo (a1, a2, initialValue, checker);
+  return DoMakeParamSpecHelperTwo<BASE> (a1, a2, initialValue, checker);
 }
 
 } // namespace ns3
--- a/src/core/random-variable.h	Wed Feb 13 22:39:17 2008 +0100
+++ b/src/core/random-variable.h	Wed Feb 13 23:37:46 2008 +0100
@@ -666,6 +666,7 @@
 
 
 class RandomVariableValue : public Value {};
+class RandomVariableParamSpec : public ParamSpec {};
 
 template <typename T1>
 Ptr<ParamSpec> MakeRandomVariableParamSpec (T1 a1,
@@ -684,14 +685,16 @@
 Ptr<ParamSpec> MakeRandomVariableParamSpec (T1 a1,
                                             RandomVariable initialValue)
 {
-  return MakeClassValueHelperParamSpec<RandomVariable, RandomVariableValue> (a1, initialValue);
+  return MakeClassValueHelperParamSpec<RandomVariable, 
+    RandomVariableValue, RandomVariableParamSpec> (a1, initialValue);
 }
 
 template <typename T1, typename T2>
 Ptr<ParamSpec> MakeRandomVariableParamSpec (T1 a1, T2 a2,
                                             RandomVariable initialValue)
 {
-  return MakeClassValueHelperParamSpec<RandomVariable, RandomVariableValue> (a1, a2, initialValue);
+  return MakeClassValueHelperParamSpec<RandomVariable, 
+    RandomVariableValue,RandomVariableParamSpec> (a1, a2, initialValue);
 }
 
 
--- a/src/core/uint-value.h	Wed Feb 13 22:39:17 2008 +0100
+++ b/src/core/uint-value.h	Wed Feb 13 23:37:46 2008 +0100
@@ -24,6 +24,8 @@
   uint64_t m_value;
 };
 
+class UintParamSpec : public ParamSpec {};
+
 template <typename T1>
 Ptr<ParamSpec> MakeUintParamSpec (T1 a1,
 				 uint64_t initialValue);
@@ -76,8 +78,8 @@
 MakeUintParamSpec (T1 a1,
 		  uint64_t initialValue)
 {
-  return MakeParamSpecHelperWithChecker (a1, UintValue (initialValue),
-					 UintValueChecker::Create (a1));
+  return MakeParamSpecHelperWithChecker<UintParamSpec> (a1, UintValue (initialValue),
+							UintValueChecker::Create (a1));
 }
 
 template <typename T1>
@@ -86,15 +88,15 @@
 				 uint64_t minValue,
 				 uint64_t maxValue)
 {
-  return MakeParamSpecHelperWithChecker (a1, UintValue (initialValue),
-					 UintValueChecker (minValue, maxValue));
+  return MakeParamSpecHelperWithChecker<UintParamSpec> (a1, UintValue (initialValue),
+							UintValueChecker (minValue, maxValue));
 }
 template <typename T1, typename T2>
 Ptr<ParamSpec> MakeUintParamSpec (T1 a1, T2 a2, 
 				 uint64_t initialValue)
 {
-  return MakeParamSpecHelperWithChecker (a1, a2, UintValue (initialValue),
-					 UintValueChecker::Create (a1));
+  return MakeParamSpecHelperWithChecker<UintParamSpec> (a1, a2, UintValue (initialValue),
+							UintValueChecker::Create (a1));
 }
 template <typename T1, typename T2>
 Ptr<ParamSpec> MakeUintParamSpec (T1 a1, T2 a2,
@@ -102,8 +104,8 @@
 				 uint64_t minValue,
 				 uint64_t maxValue)
 {
-  return MakeParamSpecHelperWithChecker (a1, a2, UintValue (initialValue),
-					 UintValueChecker (minValue, maxValue));
+  return MakeParamSpecHelperWithChecker<UintParamSpec> (a1, a2, UintValue (initialValue),
+							UintValueChecker (minValue, maxValue));
 }
 
 } // namespace ns3
--- a/src/mobility/rectangle.h	Wed Feb 13 22:39:17 2008 +0100
+++ b/src/mobility/rectangle.h	Wed Feb 13 23:37:46 2008 +0100
@@ -71,6 +71,7 @@
 
 
 class RectangleValue : public Value {};
+class RectangleParamSpec : public ParamSpec {};
 
 template <typename T1>
 Ptr<ParamSpec> MakeRectangleParamSpec (T1 a1,
@@ -87,13 +88,13 @@
 Ptr<ParamSpec> MakeRectangleParamSpec (T1 a1,
                                        Rectangle initialValue)
 {
-  return MakeClassValueHelperParamSpec<Rectangle,RectangleValue> (a1, initialValue);
+  return MakeClassValueHelperParamSpec<Rectangle,RectangleValue,RectangleParamSpec> (a1, initialValue);
 }
 template <typename T1, typename T2>
 Ptr<ParamSpec> MakeRectangleParamSpec (T1 a1, T2 a2,
                                        Rectangle initialValue)
 {
-  return MakeClassValueHelperParamSpec<Rectangle,RectangleValue> (a1, a2, initialValue);
+  return MakeClassValueHelperParamSpec<Rectangle,RectangleValue,RectangleParamSpec> (a1, a2, initialValue);
 }
 
 } // namespace ns3
--- a/src/mobility/vector.h	Wed Feb 13 22:39:17 2008 +0100
+++ b/src/mobility/vector.h	Wed Feb 13 23:37:46 2008 +0100
@@ -65,6 +65,7 @@
 double CalculateDistance (const Vector &a, const Vector &b);
 
 class VectorValue : public Value {};
+class VectorParamSpec : public ParamSpec {};
 
 std::ostream &operator << (std::ostream &os, const Vector &vector);
 std::istream &operator >> (std::istream &is, Vector &vector);
@@ -86,7 +87,7 @@
 Ptr<ParamSpec>
 MakeVectorParamSpec (T1 a1, const Vector &initialValue)
 {
-  return MakeClassValueHelperParamSpec<Vector,VectorValue> (a1, initialValue);
+  return MakeClassValueHelperParamSpec<Vector,VectorValue,VectorParamSpec> (a1, initialValue);
 }
 
 template <typename T1, typename T2>
@@ -94,7 +95,7 @@
 MakeVectorParamSpec (T1 a1, T2 a2,
                      const Vector &initialValue)
 {
-  return MakeClassValueHelperParamSpec<Vector,VectorValue> (a1, a2, initialValue);
+  return MakeClassValueHelperParamSpec<Vector,VectorValue,VectorParamSpec> (a1, a2, initialValue);
 }
 
 } // namespace ns3
--- a/src/simulator/nstime.h	Wed Feb 13 22:39:17 2008 +0100
+++ b/src/simulator/nstime.h	Wed Feb 13 23:37:46 2008 +0100
@@ -671,6 +671,7 @@
 
 
 class TimeValue : public Value {};
+class TimeParamSpec : public ParamSpec {};
 
 template <typename T1>
 Ptr<ParamSpec> MakeTimeParamSpec (T1 a1,
@@ -688,14 +689,14 @@
 Ptr<ParamSpec> MakeTimeParamSpec (T1 a1,
                                   Time initialValue)
 {
-  return MakeClassValueHelperParamSpec<Time,TimeValue> (a1, initialValue);
+  return MakeClassValueHelperParamSpec<Time,TimeValue,TimeParamSpec> (a1, initialValue);
 }
 
 template <typename T1, typename T2>
 Ptr<ParamSpec> MakeTimeParamSpec (T1 a1, T2 a2,
                                   Time initialValue)
 {
-  return MakeClassValueHelperParamSpec<Time,TimeValue> (a1, a2, initialValue);
+  return MakeClassValueHelperParamSpec<Time,TimeValue,TimeParamSpec> (a1, a2, initialValue);
 }