rework param-spec-helper code to avoid having to deal with pointers to member functions et al.
--- a/src/core/boolean-value.h Mon Feb 11 05:11:55 2008 +0100
+++ b/src/core/boolean-value.h Wed Feb 13 21:00:33 2008 +0100
@@ -25,20 +25,11 @@
};
-template <typename T>
-Ptr<ParamSpec> MakeBooleanParamSpec (bool T::*v, bool initialValue);
-
-template <typename T>
-Ptr<ParamSpec> MakeBooleanParamSpec (bool (T::*getter) (void) const,
- bool initialValue);
+template <typename T1>
+Ptr<ParamSpec> MakeBooleanParamSpec (T1 a1, bool initialValue);
-template <typename T>
-Ptr<ParamSpec> MakeBooleanParamSpec (bool (T::*getter) (void) const,
- void (T::*setter) (bool),
- bool initialValue);
-template <typename T>
-Ptr<ParamSpec> MakeBooleanParamSpec (void (T::*setter) (bool),
- bool initialValue);
+template <typename T1, typename T2>
+Ptr<ParamSpec> MakeBooleanParamSpec (T1 a1, T2 a2, bool initialValue);
} // namespace ns3
@@ -46,33 +37,19 @@
// Implementation of template functions below.
namespace ns3 {
-template <typename T>
-Ptr<ParamSpec> MakeBooleanParamSpec (bool T::*v, bool initialValue)
+template <typename T1>
+Ptr<ParamSpec> MakeBooleanParamSpec (T1 a1, bool initialValue)
{
- return MakeMemberVariableParamSpec (v, BooleanValue (initialValue));
-}
-
-template <typename T>
-Ptr<ParamSpec> MakeBooleanParamSpec (void (T::*setter) (bool),
- bool (T::*getter) (void) const,
- bool initialValue)
-{
- return MakeMemberMethodParamSpec (setter, getter, BooleanValue (initialValue));
+ return MakeParamSpecHelper (a1, BooleanValue (initialValue));
}
-template <typename T>
-Ptr<ParamSpec> MakeBooleanParamSpec (bool (T::*getter) (void) const,
- bool initialValue)
+template <typename T1, typename T2>
+Ptr<ParamSpec> MakeBooleanParamSpec (T1 a1, T2 a2, bool initialValue)
{
- return MakeMemberMethodGetterParamSpec (getter, BooleanValue (initialValue));
+ return MakeParamSpecHelper (a1, a2, BooleanValue (initialValue));
}
-template <typename T>
-Ptr<ParamSpec> MakeBooleanParamSpec (void (T::*setter) (bool),
- bool initialValue)
-{
- return MakeMemberMethodSetterParamSpec (setter, BooleanValue (initialValue));
-}
+
} // namespace ns3
--- a/src/core/fp-value.h Mon Feb 11 05:11:55 2008 +0100
+++ b/src/core/fp-value.h Wed Feb 13 21:00:33 2008 +0100
@@ -26,11 +26,11 @@
};
-template <typename U, typename T>
-Ptr<ParamSpec> MakeFpParamSpec (U T::*memberVariable,
+template <typename T1>
+Ptr<ParamSpec> MakeFpParamSpec (T1 a1,
double initialValue);
-template <typename U, typename T>
-Ptr<ParamSpec> MakeFpParamSpec (U T::*memberVariable,
+template <typename T1, typename T2>
+Ptr<ParamSpec> MakeFpParamSpec (T1 a1, T2 a2,
double initialValue,
double minValue,
double maxValue);
@@ -42,37 +42,65 @@
class FpValueChecker
{
public:
- FpValueChecker (double min, double max);
- bool Check (double v) const;
+ FpValueChecker (double minValue, double maxValue);
+ bool Check (double value) const;
+
+ template <typename T, typename U>
+ static FpValueChecker Create (U T::*) {
+ return FpValueChecker (-std::numeric_limits<U>::max (),
+ std::numeric_limits<U>::max ());
+ }
+ template <typename T, typename U>
+ static FpValueChecker Create (U (T::*) (void) const) {
+ return FpValueChecker (-std::numeric_limits<U>::max (),
+ std::numeric_limits<U>::max ());
+ }
+ template <typename T, typename U>
+ static FpValueChecker Create (void (T::*) (U)) {
+ return FpValueChecker (-std::numeric_limits<U>::max (),
+ std::numeric_limits<U>::max ());
+ }
private:
double m_min;
double m_max;
};
-template <typename U, typename T>
-Ptr<ParamSpec>
-MakeFpParamSpec (U T::*memberVariable,
- double initialValue)
+template <typename T1>
+Ptr<ParamSpec>
+MakeFpParamSpec (T1 a1,
+ double initialValue)
{
- double minValue = -std::numeric_limits<U>::max ();
- double maxValue = std::numeric_limits<U>::max ();
- return MakeMemberVariableParamSpecWithChecker (memberVariable,
- FpValue (initialValue),
- FpValueChecker (minValue, maxValue));
+ return MakeParamSpecHelperWithChecker (a1, FpValue (initialValue),
+ FpValueChecker::Create (a1));
}
-template <typename U, typename T>
-Ptr<ParamSpec>
-MakeFpParamSpec (U T::*memberVariable,
- double initialValue,
- double minValue,
- double maxValue)
+template <typename T1>
+Ptr<ParamSpec> MakeFpParamSpec (T1 a1,
+ double initialValue,
+ double minValue,
+ double maxValue)
{
- return MakeMemberVariableParamSpecWithChecker (memberVariable,
- FpValue (initialValue),
- FpValueChecker (minValue, maxValue));
+ return MakeParamSpecHelperWithChecker (a1, FpValue (initialValue),
+ FpValueChecker (minValue, maxValue));
+}
+template <typename T1, typename T2>
+Ptr<ParamSpec> MakeFpParamSpec (T1 a1, T2 a2,
+ double initialValue)
+{
+ return MakeParamSpecHelperWithChecker (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)
+{
+ return MakeParamSpecHelperWithChecker (a1, a2, FpValue (initialValue),
+ FpValueChecker (minValue, maxValue));
}
} // namespace ns3
+
#endif /* FP_VALUE_H */
--- a/src/core/int-value.h Mon Feb 11 05:11:55 2008 +0100
+++ b/src/core/int-value.h Wed Feb 13 21:00:33 2008 +0100
@@ -24,21 +24,19 @@
int64_t m_value;
};
-template <typename U, typename T>
-Ptr<ParamSpec> MakeIntParamSpec (U T::*memberVariable,
+template <typename T1>
+Ptr<ParamSpec> MakeIntParamSpec (T1 a1,
int64_t initialValue);
-template <typename U, typename T>
-Ptr<ParamSpec> MakeIntParamSpec (U T::*memberVariable,
+template <typename T1>
+Ptr<ParamSpec> MakeIntParamSpec (T1 a1,
int64_t initialValue,
int64_t minValue,
int64_t maxValue);
-template <typename U, typename T>
-Ptr<ParamSpec> MakeIntParamSpec (void (T::*setter) (U),
- U (T::*getter) (void) const,
+template <typename T1, typename T2>
+Ptr<ParamSpec> MakeIntParamSpec (T1 a1, T2 a2,
int64_t initialValue);
-template <typename U, typename T>
-Ptr<ParamSpec> MakeIntParamSpec (void (T::*setter) (U),
- U (T::*getter) (void) const,
+template <typename T1, typename T2>
+Ptr<ParamSpec> MakeIntParamSpec (T1 a1, T2 a2,
int64_t initialValue,
int64_t minValue,
int64_t maxValue);
@@ -52,54 +50,62 @@
public:
IntValueChecker (int64_t minValue, int64_t maxValue);
bool Check (const int64_t &value) const;
+
+ template <typename T, typename U>
+ static IntValueChecker Create (U T::*) {
+ return IntValueChecker (std::numeric_limits<U>::min (),
+ std::numeric_limits<U>::max ());
+ }
+ template <typename T, typename U>
+ static IntValueChecker Create (U (T::*) (void) const) {
+ return IntValueChecker (std::numeric_limits<U>::min (),
+ std::numeric_limits<U>::max ());
+ }
+ template <typename T, typename U>
+ static IntValueChecker Create (void (T::*) (U)) {
+ return IntValueChecker (std::numeric_limits<U>::min (),
+ std::numeric_limits<U>::max ());
+ }
private:
int64_t m_minValue;
int64_t m_maxValue;
};
-
-template <typename U, typename T>
+template <typename T1>
Ptr<ParamSpec>
-MakeIntParamSpec (U T::*memberVariable,
+MakeIntParamSpec (T1 a1,
int64_t initialValue)
{
- int64_t minValue = std::numeric_limits<U>::min ();
- int64_t maxValue = std::numeric_limits<U>::max ();
- return MakeMemberVariableParamSpecWithChecker (memberVariable, IntValue (initialValue),
- IntValueChecker (minValue, maxValue));
+ return MakeParamSpecHelperWithChecker (a1, IntValue (initialValue),
+ IntValueChecker::Create (a1));
}
-template <typename U, typename T>
-Ptr<ParamSpec> MakeIntParamSpec (U T::*memberVariable,
+template <typename T1>
+Ptr<ParamSpec> MakeIntParamSpec (T1 a1,
int64_t initialValue,
int64_t minValue,
int64_t maxValue)
{
- return MakeMemberVariableParamSpecWithChecker (memberVariable, IntValue (initialValue),
- IntValueChecker (minValue, maxValue));
+ return MakeParamSpecHelperWithChecker (a1, IntValue (initialValue),
+ IntValueChecker (minValue, maxValue));
}
-template <typename U, typename T>
-Ptr<ParamSpec> MakeIntParamSpec (void (T::*setter) (U),
- U (T::*getter) (void) const,
+template <typename T1, typename T2>
+Ptr<ParamSpec> MakeIntParamSpec (T1 a1, T2 a2,
int64_t initialValue)
{
- int64_t minValue = std::numeric_limits<U>::min ();
- int64_t maxValue = std::numeric_limits<U>::max ();
- return MakeMemberMethodParamSpecWithChecker (setter, getter, IntValue (initialValue),
- IntValueChecker (minValue, maxValue));
+ return MakeParamSpecHelperWithChecker (a1, a2, IntValue (initialValue),
+ IntValueChecker::Create (a1));
}
-template <typename U, typename T>
-Ptr<ParamSpec> MakeIntParamSpec (void (T::*setter) (U),
- U (T::*getter) (void) const,
+template <typename T1, typename T2>
+Ptr<ParamSpec> MakeIntParamSpec (T1 a1, T2 a2,
int64_t initialValue,
int64_t minValue,
int64_t maxValue)
{
- return MakeMemberMethodParamSpecWithChecker (setter, getter, IntValue (initialValue),
- IntValueChecker (minValue, maxValue));
+ return MakeParamSpecHelperWithChecker (a1, a2, IntValue (initialValue),
+ IntValueChecker (minValue, maxValue));
}
-
} // namespace ns3
#endif /* INT_VALUE_H */
--- a/src/core/param-spec-helper.h Mon Feb 11 05:11:55 2008 +0100
+++ b/src/core/param-spec-helper.h Wed Feb 13 21:00:33 2008 +0100
@@ -3,23 +3,29 @@
namespace ns3 {
-template <typename T, typename U, typename V>
+template <typename T1, typename V>
Ptr<ParamSpec>
-MakeMemberVariableParamSpec (U T::*memberVariable, V initialValue);
+MakeParamSpecHelper (T1 a1, V initialValue);
+
+template <typename T1, typename T2, typename V>
+Ptr<ParamSpec>
+MakeParamSpecHelper (T1 a1, T2 a2, V initialValue);
-template <typename T, typename U, typename V, typename W>
+template <typename T1, typename V, typename CHECKER>
Ptr<ParamSpec>
-MakeMemberMethodParamSpec (void (T::*setter) (U),
- V (T::*getter) (void) const,
- W initialValue);
+MakeParamSpecHelperWithChecker (T1 a1, V initialValue, CHECKER checker);
+template <typename T1, typename T2, typename V, typename CHECKER>
+Ptr<ParamSpec>
+MakeParamSpecHelperWithChecker (T1 a1, T2 a2, V initialValue, CHECKER checker);
} // namespace ns3
+/***************************************************************
+ * The implementation of the above functions.
+ ***************************************************************/
-/***************************************************************
- * The implementation of the above class functions
- ***************************************************************/
+#include "type-traits.h"
namespace ns3 {
@@ -48,11 +54,9 @@
bool Check (const T &value) const {return true;}
};
-
-
template <typename T, typename U, typename V, typename CHECKER>
Ptr<ParamSpec>
-MakeMemberVariableParamSpecWithChecker (U T::*memberVariable, V initialValue, CHECKER checker)
+DoMakeParamSpecHelperOne (U T::*memberVariable, V initialValue, CHECKER checker)
{
class MemberVariable : public ParamSpecHelper<T,V,CHECKER>
{
@@ -75,20 +79,92 @@
};
return Ptr<ParamSpec> (new MemberVariable (memberVariable, initialValue, checker), false);
}
+template <typename T, typename U, typename V>
+Ptr<ParamSpec>
+DoMakeParamSpecHelperOne (U T::*memberVariable, V initialValue)
+{
+ return DoMakeParamSpecHelperOne (memberVariable, initialValue, ParamSpecHelperSimpleChecker<U> ());
+}
+
+
+template <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>
+ {
+ public:
+ MemberMethod (U (T::*getter) (void) const,
+ V initialValue, CHECKER checker)
+ : ParamSpecHelper<T,V,CHECKER> (initialValue, checker),
+ m_getter (getter)
+ {}
+ private:
+ virtual bool DoSet (T *object, const V *v) const {
+ return false;
+ }
+ virtual bool DoGet (const T *object, V *v) const {
+ v->Set ((object->*m_getter) ());
+ return true;
+ }
+ U (T::*m_getter) (void) const;
+ };
+ return Ptr<ParamSpec> (new MemberMethod (getter, initialValue, checker), false);
+}
template <typename T, typename U, typename V>
Ptr<ParamSpec>
-MakeMemberVariableParamSpec (U T::*memberVariable, V initialValue)
+DoMakeParamSpecHelperOne (U (T::*getter) (void) const,
+ V initialValue)
+{
+ return DoMakeParamSpecHelperOne (getter, initialValue, ParamSpecHelperSimpleChecker<U> ());
+}
+
+
+
+template <typename T, typename U, typename V, typename CHECKER>
+Ptr<ParamSpec>
+DoMakeParamSpecHelperOne (void (T::*setter) (U),
+ V initialValue, CHECKER checker)
{
- return MakeMemberVariableParamSpecWithChecker (memberVariable, initialValue,
- ParamSpecHelperSimpleChecker<U> ());
+ class MemberMethod : public ParamSpecHelper<T,V,CHECKER>
+ {
+ public:
+ MemberMethod (void (T::*setter) (U),
+ V initialValue, CHECKER checker)
+ : ParamSpecHelper<T,V,CHECKER> (initialValue, checker),
+ m_setter (setter)
+ {}
+ private:
+ virtual bool DoSet (T *object, const V *v) const {
+ (object->*m_setter) (v->Get ());
+ return true;
+ }
+ virtual void DoGet (const T *object, V *v) const {
+ return false;
+ }
+ void (T::*m_setter) (U);
+ };
+ return Ptr<ParamSpec> (new MemberMethod (setter, initialValue, checker), false);
}
+template <typename T, typename U, typename V>
+Ptr<ParamSpec>
+DoMakeParamSpecHelperOne (void (T::*setter) (U),
+ V initialValue)
+{
+ return DoMakeParamSpecHelperOne (setter, initialValue,
+ ParamSpecHelperSimpleChecker<typename TypeTraits<U>::ReferencedType> ());
+}
+
+
template <typename T, typename U, typename V, typename W, typename CHECKER>
Ptr<ParamSpec>
-MakeMemberMethodParamSpecWithChecker (void (T::*setter) (U),
- V (T::*getter) (void) const,
- W initialValue, CHECKER checker)
+DoMakeParamSpecHelperTwo (void (T::*setter) (U),
+ V (T::*getter) (void) const,
+ W initialValue,
+ CHECKER checker = ParamSpecHelperSimpleChecker<V> ())
{
class MemberMethod : public ParamSpecHelper<T,W,CHECKER>
{
@@ -115,89 +191,32 @@
return Ptr<ParamSpec> (new MemberMethod (setter, getter, initialValue, checker), false);
}
-
template <typename T, typename U, typename V, typename W>
Ptr<ParamSpec>
-MakeMemberMethodParamSpec (void (T::*setter) (U),
- V (T::*getter) (void) const,
- W initialValue)
-{
- return MakeMemberMethodParamSpecWithChecker (setter, getter, initialValue,
- ParamSpecHelperSimpleChecker<V> ());
-}
-
-
-template <typename T, typename U, typename V, typename CHECKER>
-Ptr<ParamSpec>
-MakeMemberMethodGetterParamSpecWithChecker (U (T::*getter) (void) const,
- V initialValue, CHECKER checker)
+DoMakeParamSpecHelperTwo (void (T::*setter) (U),
+ V (T::*getter) (void) const,
+ W initialValue)
{
- class MemberMethod : public ParamSpecHelper<T,V,CHECKER>
- {
- public:
- MemberMethod (U (T::*getter) (void) const,
- V initialValue, CHECKER checker)
- : ParamSpecHelper<T,V,CHECKER> (initialValue, checker),
- m_getter (getter)
- {}
- private:
- virtual bool DoSet (T *object, const V *v) const {
- return false;
- }
- virtual bool DoGet (const T *object, V *v) const {
- v->Set ((object->*m_getter) ());
- return true;
- }
- U (T::*m_getter) (void) const;
- };
- return Ptr<ParamSpec> (new MemberMethod (getter, initialValue, checker), false);
+ return DoMakeParamSpecHelperTwo (setter, getter, initialValue, ParamSpecHelperSimpleChecker<V> ());
}
-
-template <typename T, typename U, typename V>
+template <typename T, typename U, typename V, typename W, typename CHECKER>
Ptr<ParamSpec>
-MakeMemberMethodGetterParamSpec (U (T::*getter) (void) const,
- V initialValue)
+DoMakeParamSpecHelperTwo (V (T::*getter) (void) const,
+ void (T::*setter) (U),
+ W initialValue,
+ CHECKER checker)
{
- return MakeMemberMethodGetterParamSpecWithChecker (getter, initialValue,
- ParamSpecHelperSimpleChecker<U> ());
+ return DoMakeParamSpecHelperTwo (setter, getter, initialValue, checker);
}
-
-template <typename T, typename U, typename V, typename CHECKER>
+template <typename T, typename U, typename V, typename W, typename CHECKER>
Ptr<ParamSpec>
-MakeMemberMethodSetterParamSpecWithChecker (void (T::*setter) (U),
- V initialValue, CHECKER checker)
+DoMakeParamSpecHelperTwo (V (T::*getter) (void) const,
+ void (T::*setter) (U),
+ W initialValue)
{
- class MemberMethod : public ParamSpecHelper<T,V,CHECKER>
- {
- public:
- MemberMethod (void (T::*setter) (U),
- V initialValue, CHECKER checker)
- : ParamSpecHelper<T,V,CHECKER> (initialValue, checker),
- m_setter (setter)
- {}
- private:
- virtual bool DoSet (T *object, const V *v) const {
- (object->*m_setter) (v->Get ());
- return true;
- }
- virtual void DoGet (const T *object, V *v) const {
- return false;
- }
- void (T::*m_setter) (U);
- };
- return Ptr<ParamSpec> (new MemberMethod (setter, initialValue, checker), false);
-}
-
-
-template <typename T, typename U, typename V>
-Ptr<ParamSpec>
-MakeMemberMethodParamSpec (void (T::*setter) (U),
- V initialValue)
-{
- return MakeMemberMethodSetterParamSpecWithChecker (setter, initialValue,
- ParamSpecHelperSimpleChecker<U> ());
+ return DoMakeParamSpecHelperTwo (setter, getter, initialValue);
}
@@ -263,6 +282,36 @@
return m_initialValue.Copy ();
}
+
+
+template <typename T1, typename V>
+Ptr<ParamSpec>
+MakeParamSpecHelper (T1 a1, V initialValue)
+{
+ return DoMakeParamSpecHelperOne (a1, initialValue);
+}
+
+template <typename T1, typename T2, typename V>
+Ptr<ParamSpec>
+MakeParamSpecHelper (T1 a1, T2 a2, V initialValue)
+{
+ return DoMakeParamSpecHelperTwo (a1, a2, initialValue);
+}
+
+template <typename T1, typename V, typename CHECKER>
+Ptr<ParamSpec>
+MakeParamSpecHelperWithChecker (T1 a1, V initialValue, CHECKER checker)
+{
+ return DoMakeParamSpecHelperOne (a1, initialValue, checker);
+}
+
+template <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);
+}
+
} // namespace ns3
#endif /* PARAM_SPEC_HELPER_H */
--- a/src/core/random-variable.h Mon Feb 11 05:11:55 2008 +0100
+++ b/src/core/random-variable.h Wed Feb 13 21:00:33 2008 +0100
@@ -673,21 +673,33 @@
RandomVariable m_variable;
};
-template <typename T>
-Ptr<ParamSpec> MakeRandomVariableParamSpec (RandomVariable T::*m_memberVariable,
+template <typename T1>
+Ptr<ParamSpec> MakeRandomVariableParamSpec (T1 a1,
RandomVariable initialValue);
+template <typename T1, typename T2>
+Ptr<ParamSpec> MakeRandomVariableParamSpec (T1 a1, T2 a2,
+ RandomVariable initialValue);
+
}//namespace ns3
namespace ns3 {
-template <typename T>
-Ptr<ParamSpec> MakeRandomVariableParamSpec (RandomVariable T::*memberVariable,
+template <typename T1>
+Ptr<ParamSpec> MakeRandomVariableParamSpec (T1 a1,
RandomVariable initialValue)
{
- return MakeMemberVariableParamSpec (memberVariable, RandomVariableValue (initialValue));
+ return MakeParamSpecHelper (a1, RandomVariableValue (initialValue));
}
+template <typename T1, typename T2>
+Ptr<ParamSpec> MakeRandomVariableParamSpec (T1 a1, T2 a2,
+ RandomVariable initialValue)
+{
+ return MakeParamSpecHelper (a1, a2, RandomVariableValue (initialValue));
+}
+
+
} // namespace ns3
#endif
--- a/src/core/uint-value.h Mon Feb 11 05:11:55 2008 +0100
+++ b/src/core/uint-value.h Wed Feb 13 21:00:33 2008 +0100
@@ -24,24 +24,22 @@
uint64_t m_value;
};
-template <typename U, typename T>
-Ptr<const ParamSpec> MakeUintParamSpec (uint64_t initialValue,
- U T::*memberVariable);
-template <typename U, typename T>
-Ptr<const ParamSpec> MakePtrUintParamSpec (uint64_t initialValue,
- uint64_t minValue,
- uint64_t maxValue,
- U T::*memberVariable);
-template <typename U, typename T>
-Ptr<const ParamSpec> MakeUintParamSpec (uint64_t initialValue,
- void (T::*setter) (U),
- U (T::*getter) (void) const);
-template <typename U, typename T>
-Ptr<const ParamSpec> MakeUintParamSpec (uint64_t initialValue,
- uint64_t minValue,
- uint64_t maxValue,
- void (T::*setter) (U),
- U (T::*getter) (void) const);
+template <typename T1>
+Ptr<ParamSpec> MakeUintParamSpec (T1 a1,
+ uint64_t initialValue);
+template <typename T1>
+Ptr<ParamSpec> MakeUintParamSpec (T1 a1,
+ uint64_t initialValue,
+ uint64_t minValue,
+ uint64_t maxValue);
+template <typename T1, typename T2>
+Ptr<ParamSpec> MakeUintParamSpec (T1 a1, T2 a2,
+ uint64_t initialValue);
+template <typename T1, typename T2>
+Ptr<ParamSpec> MakeUintParamSpec (T1 a1, T2 a2,
+ uint64_t initialValue,
+ uint64_t minValue,
+ uint64_t maxValue);
} // namespace ns3
@@ -52,56 +50,61 @@
public:
UintValueChecker (uint64_t minValue, uint64_t maxValue);
bool Check (const uint64_t &value) const;
+
+ template <typename T, typename U>
+ static UintValueChecker Create (U T::*) {
+ return UintValueChecker (std::numeric_limits<U>::min (),
+ std::numeric_limits<U>::max ());
+ }
+ template <typename T, typename U>
+ static UintValueChecker Create (U (T::*) (void) const) {
+ return UintValueChecker (std::numeric_limits<U>::min (),
+ std::numeric_limits<U>::max ());
+ }
+ template <typename T, typename U>
+ static UintValueChecker Create (void (T::*) (U)) {
+ return UintValueChecker (std::numeric_limits<U>::min (),
+ std::numeric_limits<U>::max ());
+ }
private:
uint64_t m_minValue;
uint64_t m_maxValue;
};
-template <typename U, typename T>
-Ptr<const ParamSpec>
-MakeUintParamSpec (U T::*memberVariable,
- uint64_t initialValue)
+template <typename T1>
+Ptr<ParamSpec>
+MakeUintParamSpec (T1 a1,
+ uint64_t initialValue)
{
- uint64_t minValue = std::numeric_limits<U>::min ();
- uint64_t maxValue = std::numeric_limits<U>::max ();
- return MakeMemberVariableParamSpecWithChecker (memberVariable, UintValue (initialValue),
- UintValueChecker (minValue, maxValue));
-}
-
-template <typename U, typename T>
-Ptr<const ParamSpec>
-MakeUintParamSpec (U T::*memberVariable,
- uint64_t initialValue,
- uint64_t minValue,
- uint64_t maxValue)
-{
- return MakeMemberVariableParamSpecWithChecker (memberVariable, UintValue (initialValue),
- UintValueChecker (minValue, maxValue));
+ return MakeParamSpecHelperWithChecker (a1, UintValue (initialValue),
+ UintValueChecker::Create (a1));
}
-template <typename U, typename T>
-Ptr<const ParamSpec>
-MakeUintParamSpec (void (T::*setter) (U),
- U (T::*getter) (void) const,
- uint64_t initialValue)
+template <typename T1>
+Ptr<ParamSpec> MakeUintParamSpec (T1 a1,
+ uint64_t initialValue,
+ uint64_t minValue,
+ uint64_t maxValue)
{
- uint64_t minValue = std::numeric_limits<U>::min ();
- uint64_t maxValue = std::numeric_limits<U>::max ();
- return MakeMemberMethodParamSpecWithChecker (setter, getter, UintValue (initialValue),
- UintValueChecker (minValue, maxValue));
+ return MakeParamSpecHelperWithChecker (a1, UintValue (initialValue),
+ UintValueChecker (minValue, maxValue));
}
-template <typename U, typename T>
-Ptr<const ParamSpec>
-MakeUintParamSpec (void (T::*setter) (U),
- U (T::*getter) (void) const,
- uint64_t initialValue,
- uint64_t minValue,
- uint64_t maxValue)
+template <typename T1, typename T2>
+Ptr<ParamSpec> MakeUintParamSpec (T1 a1, T2 a2,
+ uint64_t initialValue)
{
- return MakeMemberMethodParamSpecWithChecker (setter, getter, UintValue (initialValue),
- UintValueChecker (minValue, maxValue));
+ return MakeParamSpecHelperWithChecker (a1, a2, UintValue (initialValue),
+ UintValueChecker::Create (a1));
}
-
+template <typename T1, typename T2>
+Ptr<ParamSpec> MakeUintParamSpec (T1 a1, T2 a2,
+ uint64_t initialValue,
+ uint64_t minValue,
+ uint64_t maxValue)
+{
+ return MakeParamSpecHelperWithChecker (a1, a2, UintValue (initialValue),
+ UintValueChecker (minValue, maxValue));
+}
} // namespace ns3
--- a/src/mobility/rectangle.h Mon Feb 11 05:11:55 2008 +0100
+++ b/src/mobility/rectangle.h Wed Feb 13 21:00:33 2008 +0100
@@ -87,22 +87,29 @@
Rectangle m_rectangle;
};
-template <typename T>
-Ptr<ParamSpec> MakeRectangleParamSpec (Rectangle T::*memberVariable,
+template <typename T1>
+Ptr<ParamSpec> MakeRectangleParamSpec (T1 a1,
+ Rectangle initialValue);
+template <typename T1, typename T2>
+Ptr<ParamSpec> MakeRectangleParamSpec (T1 a1, T2 a2,
Rectangle initialValue);
} // namespace ns3
namespace ns3 {
-template <typename T>
-Ptr<ParamSpec>
-MakeRectangleParamSpec (Rectangle T::*memberVariable,
- Rectangle initialValue)
+template <typename T1>
+Ptr<ParamSpec> MakeRectangleParamSpec (T1 a1,
+ Rectangle initialValue)
{
- return MakeMemberVariableParamSpec (memberVariable, RectangleValue (initialValue));
+ return MakeParamSpecHelper (a1, RectangleValue (initialValue));
}
-
+template <typename T1, typename T2>
+Ptr<ParamSpec> MakeRectangleParamSpec (T1 a1, T2 a2,
+ Rectangle initialValue)
+{
+ return MakeParamSpecHelper (a1, a2, RectangleValue (initialValue));
+}
} // namespace ns3
--- a/src/mobility/vector.h Mon Feb 11 05:11:55 2008 +0100
+++ b/src/mobility/vector.h Wed Feb 13 21:00:33 2008 +0100
@@ -82,53 +82,34 @@
Vector m_vector;
};
-template <typename T>
-Ptr<ParamSpec>
-MakeVectorParamSpec (Vector T::*memberVariable, const Vector &initialValue);
-
-template <typename T>
+template <typename T1>
Ptr<ParamSpec>
-MakeVectorParamSpec (void (T::*setter) (const Vector &),
- Vector (T::*getter) (void) const,
- const Vector &initialValue);
+MakeVectorParamSpec (T1 a1, const Vector &initialValue);
-template <typename T>
+template <typename T1, typename T2>
Ptr<ParamSpec>
-MakeVectorParamSpec (Vector (T::*getter) (void) const,
+MakeVectorParamSpec (T1 a1, T2 a2,
const Vector &initialValue);
-
} // namespace ns3
namespace ns3 {
-template <typename T>
+template <typename T1>
Ptr<ParamSpec>
-MakeVectorParamSpec (Vector T::*memberVariable, const Vector &initialValue)
+MakeVectorParamSpec (T1 a1, const Vector &initialValue)
{
- return MakeMemberVariableParamSpec (memberVariable, VectorValue (initialValue));
+ return MakeParamSpecHelper (a1, VectorValue (initialValue));
}
-template <typename T>
+template <typename T1, typename T2>
Ptr<ParamSpec>
-MakeVectorParamSpec (void (T::*setter) (const Vector &),
- Vector (T::*getter) (void) const,
+MakeVectorParamSpec (T1 a1, T2 a2,
const Vector &initialValue)
{
- return MakeMemberMethodParamSpec (setter, getter, VectorValue (initialValue));
+ return MakeParamSpecHelper (a1, a2, VectorValue (initialValue));
}
-template <typename T>
-Ptr<ParamSpec>
-MakeVectorParamSpec (Vector (T::*getter) (void) const,
- const Vector &initialValue)
-{
- return MakeMemberMethodGetterParamSpec (getter, VectorValue (initialValue));
-}
-
-
-
-
} // namespace ns3
#endif /* VECTOR_H */
--- a/src/simulator/nstime.h Mon Feb 11 05:11:55 2008 +0100
+++ b/src/simulator/nstime.h Wed Feb 13 21:00:33 2008 +0100
@@ -688,19 +688,30 @@
Time m_time;
};
-template <typename T>
-Ptr<ParamSpec> MakeTimeParamSpec (Time T::*memberVariable,
+template <typename T1>
+Ptr<ParamSpec> MakeTimeParamSpec (T1 a1,
Time initialValue);
+template <typename T1, typename T2>
+Ptr<ParamSpec> MakeTimeParamSpec (T1 a1, T2 a2,
+ Time initialValue);
+
} // namespace ns3
namespace ns3 {
-template <typename T>
-Ptr<ParamSpec> MakeTimeParamSpec (Time T::*memberVariable,
+template <typename T1>
+Ptr<ParamSpec> MakeTimeParamSpec (T1 a1,
Time initialValue)
{
- return MakeMemberVariableParamSpec (memberVariable, TimeValue (initialValue));
+ return MakeParamSpecHelper (a1, TimeValue (initialValue));
+}
+
+template <typename T1, typename T2>
+Ptr<ParamSpec> MakeTimeParamSpec (T1 a1, T2 a2,
+ Time initialValue)
+{
+ return MakeParamSpecHelper (a1, a2, TimeValue (initialValue));
}