Michael Stefaniuc : browseui: Use ifaces instead of vtbl pointers in ACLMulti.

Alexandre Julliard julliard at winehq.org
Fri Dec 10 11:56:58 CST 2010


Module: wine
Branch: master
Commit: 2085922d78e167eb47751ea3473c79259fc5cbaf
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=2085922d78e167eb47751ea3473c79259fc5cbaf

Author: Michael Stefaniuc <mstefani at redhat.de>
Date:   Fri Dec 10 09:31:27 2010 +0100

browseui: Use ifaces instead of vtbl pointers in ACLMulti.

---

 dlls/browseui/aclmulti.c |   47 +++++++++++++++++++++++++--------------------
 1 files changed, 26 insertions(+), 21 deletions(-)

diff --git a/dlls/browseui/aclmulti.c b/dlls/browseui/aclmulti.c
index c7daba0..0ca6758 100644
--- a/dlls/browseui/aclmulti.c
+++ b/dlls/browseui/aclmulti.c
@@ -49,23 +49,28 @@ struct ACLMultiSublist {
 };
 
 typedef struct tagACLMulti {
-    const IEnumStringVtbl *vtbl;
-    const IACListVtbl *aclVtbl;
-    const IObjMgrVtbl *objmgrVtbl;
+    IEnumString IEnumString_iface;
+    IACList IACList_iface;
+    IObjMgr IObjMgr_iface;
     LONG refCount;
     INT nObjs;
     INT currObj;
     struct ACLMultiSublist *objs;
 } ACLMulti;
 
+static inline ACLMulti *impl_from_IEnumString(IEnumString *iface)
+{
+    return CONTAINING_RECORD(iface, ACLMulti, IEnumString_iface);
+}
+
 static inline ACLMulti *impl_from_IACList(IACList *iface)
 {
-    return (ACLMulti *)((char *)iface - FIELD_OFFSET(ACLMulti, aclVtbl));
+    return CONTAINING_RECORD(iface, ACLMulti, IACList_iface);
 }
 
 static inline ACLMulti *impl_from_IObjMgr(IObjMgr *iface)
 {
-    return (ACLMulti *)((char *)iface - FIELD_OFFSET(ACLMulti, objmgrVtbl));
+    return CONTAINING_RECORD(iface, ACLMulti, IObjMgr_iface);
 }
 
 static void release_obj(struct ACLMultiSublist *obj)
@@ -90,7 +95,7 @@ static void ACLMulti_Destructor(ACLMulti *This)
 
 static HRESULT WINAPI ACLMulti_QueryInterface(IEnumString *iface, REFIID iid, LPVOID *ppvOut)
 {
-    ACLMulti *This = (ACLMulti *)iface;
+    ACLMulti *This = impl_from_IEnumString(iface);
     *ppvOut = NULL;
 
     if (IsEqualIID(iid, &IID_IUnknown) || IsEqualIID(iid, &IID_IEnumString))
@@ -99,11 +104,11 @@ static HRESULT WINAPI ACLMulti_QueryInterface(IEnumString *iface, REFIID iid, LP
     }
     else if (IsEqualIID(iid, &IID_IACList))
     {
-        *ppvOut = &This->aclVtbl;
+        *ppvOut = &This->IACList_iface;
     }
     else if (IsEqualIID(iid, &IID_IObjMgr))
     {
-        *ppvOut = &This->objmgrVtbl;
+        *ppvOut = &This->IObjMgr_iface;
     }
 
     if (*ppvOut)
@@ -118,13 +123,13 @@ static HRESULT WINAPI ACLMulti_QueryInterface(IEnumString *iface, REFIID iid, LP
 
 static ULONG WINAPI ACLMulti_AddRef(IEnumString *iface)
 {
-    ACLMulti *This = (ACLMulti *)iface;
+    ACLMulti *This = impl_from_IEnumString(iface);
     return InterlockedIncrement(&This->refCount);
 }
 
 static ULONG WINAPI ACLMulti_Release(IEnumString *iface)
 {
-    ACLMulti *This = (ACLMulti *)iface;
+    ACLMulti *This = impl_from_IEnumString(iface);
     ULONG ret;
 
     ret = InterlockedDecrement(&This->refCount);
@@ -173,7 +178,7 @@ static HRESULT WINAPI ACLMulti_Remove(IObjMgr *iface, IUnknown *obj)
 
 static HRESULT WINAPI ACLMulti_Next(IEnumString *iface, ULONG celt, LPOLESTR *rgelt, ULONG *pceltFetched)
 {
-    ACLMulti *This = (ACLMulti *)iface;
+    ACLMulti *This = impl_from_IEnumString(iface);
 
     TRACE("(%p, %d, %p, %p)\n", iface, celt, rgelt, pceltFetched);
     while (This->currObj < This->nObjs)
@@ -196,7 +201,7 @@ static HRESULT WINAPI ACLMulti_Next(IEnumString *iface, ULONG celt, LPOLESTR *rg
 
 static HRESULT WINAPI ACLMulti_Reset(IEnumString *iface)
 {
-    ACLMulti *This = (ACLMulti *)iface;
+    ACLMulti *This = impl_from_IEnumString(iface);
     int i;
 
     This->currObj = 0;
@@ -252,19 +257,19 @@ static const IEnumStringVtbl ACLMultiVtbl =
 static HRESULT WINAPI ACLMulti_IObjMgr_QueryInterface(IObjMgr *iface, REFIID iid, LPVOID *ppvOut)
 {
     ACLMulti *This = impl_from_IObjMgr(iface);
-    return ACLMulti_QueryInterface((IEnumString *)This, iid, ppvOut);
+    return ACLMulti_QueryInterface(&This->IEnumString_iface, iid, ppvOut);
 }
 
 static ULONG WINAPI ACLMulti_IObjMgr_AddRef(IObjMgr *iface)
 {
     ACLMulti *This = impl_from_IObjMgr(iface);
-    return ACLMulti_AddRef((IEnumString *)This);
+    return ACLMulti_AddRef(&This->IEnumString_iface);
 }
 
 static ULONG WINAPI ACLMulti_IObjMgr_Release(IObjMgr *iface)
 {
     ACLMulti *This = impl_from_IObjMgr(iface);
-    return ACLMulti_Release((IEnumString *)This);
+    return ACLMulti_Release(&This->IEnumString_iface);
 }
 
 static const IObjMgrVtbl ACLMulti_ObjMgrVtbl =
@@ -280,19 +285,19 @@ static const IObjMgrVtbl ACLMulti_ObjMgrVtbl =
 static HRESULT WINAPI ACLMulti_IACList_QueryInterface(IACList *iface, REFIID iid, LPVOID *ppvOut)
 {
     ACLMulti *This = impl_from_IACList(iface);
-    return ACLMulti_QueryInterface((IEnumString *)This, iid, ppvOut);
+    return ACLMulti_QueryInterface(&This->IEnumString_iface, iid, ppvOut);
 }
 
 static ULONG WINAPI ACLMulti_IACList_AddRef(IACList *iface)
 {
     ACLMulti *This = impl_from_IACList(iface);
-    return ACLMulti_AddRef((IEnumString *)This);
+    return ACLMulti_AddRef(&This->IEnumString_iface);
 }
 
 static ULONG WINAPI ACLMulti_IACList_Release(IACList *iface)
 {
     ACLMulti *This = impl_from_IACList(iface);
-    return ACLMulti_Release((IEnumString *)This);
+    return ACLMulti_Release(&This->IEnumString_iface);
 }
 
 static const IACListVtbl ACLMulti_ACListVtbl =
@@ -314,9 +319,9 @@ HRESULT ACLMulti_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut)
     if (This == NULL)
         return E_OUTOFMEMORY;
 
-    This->vtbl = &ACLMultiVtbl;
-    This->aclVtbl = &ACLMulti_ACListVtbl;
-    This->objmgrVtbl = &ACLMulti_ObjMgrVtbl;
+    This->IEnumString_iface.lpVtbl = &ACLMultiVtbl;
+    This->IACList_iface.lpVtbl = &ACLMulti_ACListVtbl;
+    This->IObjMgr_iface.lpVtbl = &ACLMulti_ObjMgrVtbl;
     This->refCount = 1;
 
     TRACE("returning %p\n", This);




More information about the wine-cvs mailing list