fix bug 122: get rid of duplicate argument to QueryInterface

This commit is contained in:
Mathieu Lacage
2008-01-02 09:25:31 +01:00
parent 6b0e717a19
commit f3e77eea3d
31 changed files with 128 additions and 121 deletions

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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));

View File

@@ -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