fix bug 122: get rid of duplicate argument to QueryInterface
This commit is contained in:
@@ -341,14 +341,14 @@ ComponentManagerTest::RunTests (void)
|
||||
bool ok = true;
|
||||
|
||||
Ptr<A> a = 0;
|
||||
a = ComponentManager::Create<A> (A::cidZero, A::iid);
|
||||
a = ComponentManager::Create<A> (A::cidZero);
|
||||
if (a == 0 ||
|
||||
!a->m_zeroInvoked)
|
||||
{
|
||||
ok = false;
|
||||
}
|
||||
|
||||
a = ComponentManager::Create<A,bool> (A::cidOneBool, A::iid, true);
|
||||
a = ComponentManager::Create<A,bool> (A::cidOneBool, true);
|
||||
if (a == 0 ||
|
||||
!a->m_oneBoolInvoked ||
|
||||
!a->m_bool)
|
||||
@@ -356,7 +356,7 @@ ComponentManagerTest::RunTests (void)
|
||||
ok = false;
|
||||
}
|
||||
|
||||
a = ComponentManager::Create<A,bool> (A::cidOneBool, A::iid, false);
|
||||
a = ComponentManager::Create<A,bool> (A::cidOneBool, false);
|
||||
if (a == 0 ||
|
||||
!a->m_oneBoolInvoked ||
|
||||
a->m_bool)
|
||||
@@ -364,7 +364,7 @@ ComponentManagerTest::RunTests (void)
|
||||
ok = false;
|
||||
}
|
||||
|
||||
a = ComponentManager::Create<A,uint32_t> (A::cidOneUi32, A::iid, 10);
|
||||
a = ComponentManager::Create<A,uint32_t> (A::cidOneUi32, 10);
|
||||
if (a == 0 ||
|
||||
!a->m_oneUi32Invoked ||
|
||||
a->m_ui32 != 10)
|
||||
@@ -372,7 +372,7 @@ ComponentManagerTest::RunTests (void)
|
||||
ok = false;
|
||||
}
|
||||
|
||||
a = ComponentManager::Create<A> (A::cidOneUi32, A::iid, (uint32_t)10);
|
||||
a = ComponentManager::Create<A> (A::cidOneUi32, (uint32_t)10);
|
||||
if (a == 0 ||
|
||||
!a->m_oneUi32Invoked ||
|
||||
a->m_ui32 != 10)
|
||||
@@ -380,7 +380,7 @@ ComponentManagerTest::RunTests (void)
|
||||
ok = false;
|
||||
}
|
||||
|
||||
Ptr<B> b = ComponentManager::Create<B,uint32_t> (A::cidOneUi32, B::iid, 10);
|
||||
Ptr<B> b = ComponentManager::Create<B,uint32_t> (A::cidOneUi32, 10);
|
||||
if (b == 0)
|
||||
{
|
||||
ok = false;
|
||||
|
||||
@@ -264,7 +264,6 @@ public:
|
||||
|
||||
/**
|
||||
* \param classId class id of the constructor to invoke.
|
||||
* \param iid interface id to query for
|
||||
* \return a pointer to the instance created.
|
||||
*
|
||||
* Create an instance of the object identified by its
|
||||
@@ -272,11 +271,10 @@ public:
|
||||
* result.
|
||||
*/
|
||||
template <typename T>
|
||||
static Ptr<T> Create (ClassId classId, InterfaceId iid);
|
||||
static Ptr<T> Create (ClassId classId);
|
||||
|
||||
/**
|
||||
* \param classId class id of the constructor to invoke.
|
||||
* \param iid interface id to query for
|
||||
* \param a1 first argument to pass to constructor
|
||||
* \return a pointer to the instance created.
|
||||
*
|
||||
@@ -285,11 +283,10 @@ public:
|
||||
* result.
|
||||
*/
|
||||
template <typename T, typename T1>
|
||||
static Ptr<T> Create (ClassId classId, InterfaceId iid, T1 a1);
|
||||
static Ptr<T> Create (ClassId classId, T1 a1);
|
||||
|
||||
/**
|
||||
* \param classId class id of the constructor to invoke.
|
||||
* \param iid interface id to query for
|
||||
* \param a1 first argument to pass to constructor
|
||||
* \param a2 second argument to pass to constructor
|
||||
* \return a pointer to the instance created.
|
||||
@@ -299,11 +296,10 @@ public:
|
||||
* result.
|
||||
*/
|
||||
template <typename T, typename T1, typename T2>
|
||||
static Ptr<T> Create (ClassId classId, InterfaceId iid, T1 a1, T2 a2);
|
||||
static Ptr<T> Create (ClassId classId, T1 a1, T2 a2);
|
||||
|
||||
/**
|
||||
* \param classId class id of the constructor to invoke.
|
||||
* \param iid interface id to query for
|
||||
* \param a1 first argument to pass to constructor
|
||||
* \param a2 second argument to pass to constructor
|
||||
* \param a3 third argument to pass to constructor
|
||||
@@ -314,11 +310,10 @@ public:
|
||||
* result.
|
||||
*/
|
||||
template <typename T, typename T1, typename T2, typename T3>
|
||||
static Ptr<T> Create (ClassId classId, InterfaceId iid, T1 a1, T2 a2, T3 a3);
|
||||
static Ptr<T> Create (ClassId classId, T1 a1, T2 a2, T3 a3);
|
||||
|
||||
/**
|
||||
* \param classId class id of the constructor to invoke.
|
||||
* \param iid interface id to query for
|
||||
* \param a1 first argument to pass to constructor
|
||||
* \param a2 second argument to pass to constructor
|
||||
* \param a3 third argument to pass to constructor
|
||||
@@ -330,11 +325,10 @@ public:
|
||||
* result.
|
||||
*/
|
||||
template <typename T, typename T1, typename T2, typename T3, typename T4>
|
||||
static Ptr<T> Create (ClassId classId, InterfaceId iid, T1 a1, T2 a2, T3 a3, T4 a4);
|
||||
static Ptr<T> Create (ClassId classId, T1 a1, T2 a2, T3 a3, T4 a4);
|
||||
|
||||
/**
|
||||
* \param classId class id of the constructor to invoke.
|
||||
* \param iid interface id to query for
|
||||
* \param a1 first argument to pass to constructor
|
||||
* \param a2 second argument to pass to constructor
|
||||
* \param a3 third argument to pass to constructor
|
||||
@@ -347,11 +341,11 @@ public:
|
||||
* result.
|
||||
*/
|
||||
template <typename T, typename T1, typename T2, typename T3, typename T4, typename T5>
|
||||
static Ptr<T> Create (ClassId classId, InterfaceId iid, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
|
||||
static Ptr<T> Create (ClassId classId, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5);
|
||||
|
||||
private:
|
||||
friend void RegisterCallback (ClassId classId, CallbackBase *callback,
|
||||
std::vector<const InterfaceId *> supportedInterfaces);
|
||||
std::vector<const InterfaceId *> supportedInterfaces);
|
||||
static void Register (ClassId classId, CallbackBase *callback,
|
||||
std::vector<const InterfaceId *> supportedInterfaces);
|
||||
|
||||
@@ -627,56 +621,56 @@ ComponentManager::Create (ClassId classId, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
|
||||
|
||||
template <typename T>
|
||||
Ptr<T>
|
||||
ComponentManager::Create (ClassId classId, InterfaceId iid)
|
||||
ComponentManager::Create (ClassId classId)
|
||||
{
|
||||
Ptr<Object> obj = Create (classId);
|
||||
Ptr<T> i = obj->QueryInterface<T> (iid);
|
||||
Ptr<T> i = obj->QueryInterface<T> ();
|
||||
return i;
|
||||
}
|
||||
|
||||
template <typename T, typename T1>
|
||||
Ptr<T>
|
||||
ComponentManager::Create (ClassId classId, InterfaceId iid, T1 a1)
|
||||
ComponentManager::Create (ClassId classId, T1 a1)
|
||||
{
|
||||
Ptr<Object> obj = Create (classId, a1);
|
||||
Ptr<T> i = obj->QueryInterface<T> (iid);
|
||||
Ptr<T> i = obj->QueryInterface<T> ();
|
||||
return i;
|
||||
}
|
||||
|
||||
template <typename T, typename T1, typename T2>
|
||||
Ptr<T>
|
||||
ComponentManager::Create (ClassId classId, InterfaceId iid, T1 a1, T2 a2)
|
||||
ComponentManager::Create (ClassId classId, T1 a1, T2 a2)
|
||||
{
|
||||
Ptr<Object> obj = Create (classId, a1, a2);
|
||||
Ptr<T> i = obj->QueryInterface<T> (iid);
|
||||
Ptr<T> i = obj->QueryInterface<T> ();
|
||||
return i;
|
||||
}
|
||||
|
||||
|
||||
template <typename T, typename T1, typename T2, typename T3>
|
||||
Ptr<T>
|
||||
ComponentManager::Create (ClassId classId, InterfaceId iid, T1 a1, T2 a2, T3 a3)
|
||||
ComponentManager::Create (ClassId classId, T1 a1, T2 a2, T3 a3)
|
||||
{
|
||||
Ptr<Object> obj = Create (classId, a1, a2, a3);
|
||||
Ptr<T> i = obj->QueryInterface<T> (iid);
|
||||
Ptr<T> i = obj->QueryInterface<T> ();
|
||||
return i;
|
||||
}
|
||||
|
||||
template <typename T, typename T1, typename T2, typename T3, typename T4>
|
||||
Ptr<T>
|
||||
ComponentManager::Create (ClassId classId, InterfaceId iid, T1 a1, T2 a2, T3 a3, T4 a4)
|
||||
ComponentManager::Create (ClassId classId, T1 a1, T2 a2, T3 a3, T4 a4)
|
||||
{
|
||||
Ptr<Object> obj = Create (classId, a1, a2, a3, a4);
|
||||
Ptr<T> i = obj->QueryInterface<T> (iid);
|
||||
Ptr<T> i = obj->QueryInterface<T> ();
|
||||
return i;
|
||||
}
|
||||
|
||||
template <typename T, typename T1, typename T2, typename T3, typename T4, typename T5>
|
||||
Ptr<T>
|
||||
ComponentManager::Create (ClassId classId, InterfaceId iid, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
|
||||
ComponentManager::Create (ClassId classId, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5)
|
||||
{
|
||||
Ptr<Object> obj = Create (classId, a1, a2, a3, a4, a5);
|
||||
Ptr<T> i = obj->QueryInterface<T> (iid);
|
||||
Ptr<T> i = obj->QueryInterface<T> ();
|
||||
return i;
|
||||
}
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ InterfaceIdTraceResolver::ParseForInterface (std::string path)
|
||||
Ptr<Object> interface = m_aggregate->QueryInterface<Object> (interfaceId);
|
||||
return interface;
|
||||
}
|
||||
void
|
||||
void
|
||||
InterfaceIdTraceResolver::Connect (std::string path, CallbackBase const &cb, const TraceContext &context)
|
||||
{
|
||||
Ptr<const Object> interface = ParseForInterface (path);
|
||||
@@ -546,46 +546,46 @@ ObjectTest::RunTests (void)
|
||||
bool result = true;
|
||||
|
||||
Ptr<BaseA> baseA = CreateObject<BaseA> ();
|
||||
NS_TEST_ASSERT_EQUAL (baseA->QueryInterface<BaseA> (BaseA::iid), baseA);
|
||||
NS_TEST_ASSERT_EQUAL (baseA->QueryInterface<BaseA> (), baseA);
|
||||
NS_TEST_ASSERT_EQUAL (baseA->QueryInterface<BaseA> (DerivedA::iid), 0);
|
||||
NS_TEST_ASSERT_EQUAL (baseA->QueryInterface<DerivedA> (DerivedA::iid), 0);
|
||||
NS_TEST_ASSERT_EQUAL (baseA->QueryInterface<DerivedA> (), 0);
|
||||
baseA = CreateObject<DerivedA> (10);
|
||||
NS_TEST_ASSERT_EQUAL (baseA->QueryInterface<BaseA> (BaseA::iid), baseA);
|
||||
NS_TEST_ASSERT_EQUAL (baseA->QueryInterface<BaseA> (), baseA);
|
||||
NS_TEST_ASSERT_EQUAL (baseA->QueryInterface<BaseA> (DerivedA::iid), baseA);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseA->QueryInterface<DerivedA> (DerivedA::iid), 0);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseA->QueryInterface<DerivedA> (), 0);
|
||||
|
||||
baseA = CreateObject<BaseA> ();
|
||||
Ptr<BaseB> baseB = CreateObject<BaseB> ();
|
||||
Ptr<BaseB> baseBCopy = baseB;
|
||||
baseA->AddInterface (baseB);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseA->QueryInterface<BaseA> (BaseA::iid), 0);
|
||||
NS_TEST_ASSERT_EQUAL (baseA->QueryInterface<DerivedA> (DerivedA::iid), 0);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseA->QueryInterface<BaseB> (BaseB::iid), 0);
|
||||
NS_TEST_ASSERT_EQUAL (baseA->QueryInterface<DerivedB> (DerivedB::iid), 0);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseB->QueryInterface<BaseB> (BaseB::iid), 0);
|
||||
NS_TEST_ASSERT_EQUAL (baseB->QueryInterface<DerivedB> (DerivedB::iid), 0);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseB->QueryInterface<BaseA> (BaseA::iid), 0);
|
||||
NS_TEST_ASSERT_EQUAL (baseB->QueryInterface<DerivedA> (DerivedA::iid), 0);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseBCopy->QueryInterface<BaseA> (BaseA::iid), 0);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseA->QueryInterface<BaseA> (), 0);
|
||||
NS_TEST_ASSERT_EQUAL (baseA->QueryInterface<DerivedA> (), 0);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseA->QueryInterface<BaseB> (), 0);
|
||||
NS_TEST_ASSERT_EQUAL (baseA->QueryInterface<DerivedB> (), 0);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseB->QueryInterface<BaseB> (), 0);
|
||||
NS_TEST_ASSERT_EQUAL (baseB->QueryInterface<DerivedB> (), 0);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseB->QueryInterface<BaseA> (), 0);
|
||||
NS_TEST_ASSERT_EQUAL (baseB->QueryInterface<DerivedA> (), 0);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseBCopy->QueryInterface<BaseA> (), 0);
|
||||
|
||||
baseA = CreateObject<DerivedA> (1);
|
||||
baseB = CreateObject<DerivedB> (1);
|
||||
baseBCopy = baseB;
|
||||
baseA->AddInterface (baseB);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseA->QueryInterface<DerivedB> (DerivedB::iid), 0);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseA->QueryInterface<BaseB> (BaseB::iid), 0);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseB->QueryInterface<DerivedA> (DerivedA::iid), 0);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseB->QueryInterface<BaseA> (BaseA::iid), 0);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseBCopy->QueryInterface<DerivedA> (DerivedA::iid), 0);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseBCopy->QueryInterface<BaseA> (BaseA::iid), 0);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseB->QueryInterface<DerivedB> (DerivedB::iid), 0);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseB->QueryInterface<BaseB> (BaseB::iid), 0)
|
||||
NS_TEST_ASSERT_UNEQUAL (baseA->QueryInterface<DerivedB> (), 0);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseA->QueryInterface<BaseB> (), 0);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseB->QueryInterface<DerivedA> (), 0);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseB->QueryInterface<BaseA> (), 0);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseBCopy->QueryInterface<DerivedA> (), 0);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseBCopy->QueryInterface<BaseA> (), 0);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseB->QueryInterface<DerivedB> (), 0);
|
||||
NS_TEST_ASSERT_UNEQUAL (baseB->QueryInterface<BaseB> (), 0)
|
||||
|
||||
baseA = CreateObject<BaseA> ();
|
||||
baseB = CreateObject<BaseB> ();
|
||||
baseA->AddInterface (baseB);
|
||||
baseA = 0;
|
||||
baseA = baseB->QueryInterface<BaseA> (BaseA::iid);
|
||||
baseA = baseB->QueryInterface<BaseA> ();
|
||||
|
||||
baseA = CreateObject<BaseA> ();
|
||||
baseA->TraceConnect ("/basea-x", MakeCallback (&ObjectTest::BaseATrace, this));
|
||||
|
||||
@@ -117,9 +117,13 @@ public:
|
||||
*/
|
||||
inline void Unref (void) const;
|
||||
/**
|
||||
* \param iid the interface requested
|
||||
* \returns a pointer to the requested interface or zero if it could not be found.
|
||||
*
|
||||
*/
|
||||
template <typename T>
|
||||
Ptr<T> QueryInterface (void) const;
|
||||
/**
|
||||
* \param iid the interface id of the requested interface
|
||||
* \returns a pointer to the requested interface or zero if it could not be found.
|
||||
*/
|
||||
template <typename T>
|
||||
Ptr<T> QueryInterface (InterfaceId iid) const;
|
||||
@@ -257,6 +261,18 @@ Object::Unref (void) const
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
Ptr<T>
|
||||
Object::QueryInterface () const
|
||||
{
|
||||
Ptr<Object> found = DoQueryInterface (T::iid);
|
||||
if (found != 0)
|
||||
{
|
||||
return Ptr<T> (dynamic_cast<T *> (PeekPointer (found)));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
Ptr<T>
|
||||
Object::QueryInterface (InterfaceId iid) const
|
||||
|
||||
Reference in New Issue
Block a user