Jacek Caban : mshtml: Get rid of htmldoc_vtbl_t.

Alexandre Julliard julliard at winehq.org
Thu Sep 17 13:52:47 CDT 2009


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Sep 16 22:14:21 2009 +0200

mshtml: Get rid of htmldoc_vtbl_t.

---

 dlls/mshtml/htmldoc.c        |  102 +++++++++---------------------------------
 dlls/mshtml/mshtml_private.h |   15 ++----
 2 files changed, 27 insertions(+), 90 deletions(-)

diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
index 4999e72..500723a 100644
--- a/dlls/mshtml/htmldoc.c
+++ b/dlls/mshtml/htmldoc.c
@@ -1728,13 +1728,14 @@ static dispex_static_data_t HTMLDocument_dispex = {
     HTMLDocument_iface_tids
 };
 
-static void init_doc(HTMLDocument *doc, const htmldoc_vtbl_t *vtbl)
+static void init_doc(HTMLDocument *doc, IUnknown *unk_impl)
 {
-    doc->vtbl = vtbl;
     doc->lpHTMLDocument2Vtbl = &HTMLDocumentVtbl;
     doc->lpIDispatchExVtbl = &DocDispatchExVtbl;
     doc->lpSupportErrorInfoVtbl = &SupportErrorInfoVtbl;
 
+    doc->unk_impl = unk_impl;
+
     HTMLDocument_HTMLDocument3_Init(doc);
     HTMLDocument_HTMLDocument5_Init(doc);
     HTMLDocument_Persist_Init(doc);
@@ -1768,37 +1769,6 @@ static void destroy_htmldoc(HTMLDocument *This)
         nsIDOMHTMLDocument_Release(This->nsdoc);
 }
 
-#define HTMLDOCNODE_THIS(base) DEFINE_THIS2(HTMLDocumentNode, basedoc, base)
-
-static HRESULT HTMLDocumentNode_QueryInterface(HTMLDocument *base, REFIID riid, void **ppv)
-{
-    HTMLDocumentNode *This = HTMLDOCNODE_THIS(base);
-
-    return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This->node), riid, ppv);
-}
-
-static ULONG HTMLDocumentNode_AddRef(HTMLDocument *base)
-{
-    HTMLDocumentNode *This = HTMLDOCNODE_THIS(base);
-
-    return IHTMLDOMNode_AddRef(HTMLDOMNODE(&This->node));
-}
-
-static ULONG HTMLDocumentNode_Release(HTMLDocument *base)
-{
-    HTMLDocumentNode *This = HTMLDOCNODE_THIS(base);
-
-    return IHTMLDOMNode_Release(HTMLDOMNODE(&This->node));
-}
-
-#undef HTMLDOCNODE_THIS
-
-static const htmldoc_vtbl_t HTMLDocumentNodeVtbl = {
-    HTMLDocumentNode_QueryInterface,
-    HTMLDocumentNode_AddRef,
-    HTMLDocumentNode_Release
-};
-
 #define HTMLDOCNODE_NODE_THIS(iface) DEFINE_THIS2(HTMLDocumentNode, node, iface)
 
 static HRESULT HTMLDocumentNode_QI(HTMLDOMNode *iface, REFIID riid, void **ppv)
@@ -1839,7 +1809,7 @@ HRESULT create_doc_from_nsdoc(nsIDOMHTMLDocument *nsdoc, HTMLDocumentObj *doc_ob
     doc->basedoc.doc_node = doc;
     doc->basedoc.doc_obj = doc_obj;
 
-    init_doc(&doc->basedoc, &HTMLDocumentNodeVtbl);
+    init_doc(&doc->basedoc, (IUnknown*)HTMLDOMNODE(&doc->node));
     doc->ref = 1;
 
     nsIDOMHTMLDocument_AddRef(nsdoc);
@@ -1866,42 +1836,6 @@ HRESULT create_doc_from_nsdoc(nsIDOMHTMLDocument *nsdoc, HTMLDocumentObj *doc_ob
 static HRESULT WINAPI CustomDoc_QueryInterface(ICustomDoc *iface, REFIID riid, void **ppv)
 {
     HTMLDocumentObj *This = CUSTOMDOC_THIS(iface);
-    return IHTMLDocument2_QueryInterface(HTMLDOC(&This->basedoc), riid, ppv);
-}
-
-static ULONG WINAPI CustomDoc_AddRef(ICustomDoc *iface)
-{
-    HTMLDocumentObj *This = CUSTOMDOC_THIS(iface);
-    return IHTMLDocument2_AddRef(HTMLDOC(&This->basedoc));
-}
-
-static ULONG WINAPI CustomDoc_Release(ICustomDoc *iface)
-{
-    HTMLDocumentObj *This = CUSTOMDOC_THIS(iface);
-    return IHTMLDocument_Release(HTMLDOC(&This->basedoc));
-}
-
-static HRESULT WINAPI CustomDoc_SetUIHandler(ICustomDoc *iface, IDocHostUIHandler *pUIHandler)
-{
-    HTMLDocumentObj *This = CUSTOMDOC_THIS(iface);
-    FIXME("(%p)->(%p)\n", This, pUIHandler);
-    return E_NOTIMPL;
-}
-
-#undef CUSTOMDOC_THIS
-
-static const ICustomDocVtbl CustomDocVtbl = {
-    CustomDoc_QueryInterface,
-    CustomDoc_AddRef,
-    CustomDoc_Release,
-    CustomDoc_SetUIHandler
-};
-
-#define HTMLDOCOBJ_THIS(base) DEFINE_THIS2(HTMLDocumentObj, basedoc, base)
-
-static HRESULT HTMLDocumentObj_QueryInterface(HTMLDocument *base, REFIID riid, void **ppv)
-{
-    HTMLDocumentObj *This = HTMLDOCOBJ_THIS(base);
 
     if(htmldoc_qi(&This->basedoc, riid, ppv))
         return *ppv ? S_OK : E_NOINTERFACE;
@@ -1919,9 +1853,9 @@ static HRESULT HTMLDocumentObj_QueryInterface(HTMLDocument *base, REFIID riid, v
     return S_OK;
 }
 
-static ULONG HTMLDocumentObj_AddRef(HTMLDocument *base)
+static ULONG WINAPI CustomDoc_AddRef(ICustomDoc *iface)
 {
-    HTMLDocumentObj *This = HTMLDOCOBJ_THIS(base);
+    HTMLDocumentObj *This = CUSTOMDOC_THIS(iface);
     ULONG ref = InterlockedIncrement(&This->ref);
 
     TRACE("(%p) ref = %u\n", This, ref);
@@ -1929,9 +1863,9 @@ static ULONG HTMLDocumentObj_AddRef(HTMLDocument *base)
     return ref;
 }
 
-static ULONG HTMLDocumentObj_Release(HTMLDocument *base)
+static ULONG WINAPI CustomDoc_Release(ICustomDoc *iface)
 {
-    HTMLDocumentObj *This = HTMLDOCOBJ_THIS(base);
+    HTMLDocumentObj *This = CUSTOMDOC_THIS(iface);
     ULONG ref = InterlockedDecrement(&This->ref);
 
     TRACE("(%p) ref = %u\n", This, ref);
@@ -1975,12 +1909,20 @@ static ULONG HTMLDocumentObj_Release(HTMLDocument *base)
     return ref;
 }
 
-#undef HTMLDOCOBJ_THIS
+static HRESULT WINAPI CustomDoc_SetUIHandler(ICustomDoc *iface, IDocHostUIHandler *pUIHandler)
+{
+    HTMLDocumentObj *This = CUSTOMDOC_THIS(iface);
+    FIXME("(%p)->(%p)\n", This, pUIHandler);
+    return E_NOTIMPL;
+}
+
+#undef CUSTOMDOC_THIS
 
-static const htmldoc_vtbl_t HTMLDocumentObjVtbl = {
-    HTMLDocumentObj_QueryInterface,
-    HTMLDocumentObj_AddRef,
-    HTMLDocumentObj_Release
+static const ICustomDocVtbl CustomDocVtbl = {
+    CustomDoc_QueryInterface,
+    CustomDoc_AddRef,
+    CustomDoc_Release,
+    CustomDoc_SetUIHandler
 };
 
 HRESULT HTMLDocument_Create(IUnknown *pUnkOuter, REFIID riid, void** ppvObject)
@@ -1995,7 +1937,7 @@ HRESULT HTMLDocument_Create(IUnknown *pUnkOuter, REFIID riid, void** ppvObject)
     if(!doc)
         return E_OUTOFMEMORY;
 
-    init_doc(&doc->basedoc, &HTMLDocumentObjVtbl);
+    init_doc(&doc->basedoc, (IUnknown*)CUSTOMDOC(doc));
 
     doc->lpCustomDocVtbl = &CustomDocVtbl;
     doc->ref = 1;
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index eb85c42..b5c6cd8 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -246,15 +246,8 @@ struct ConnectionPoint {
     ConnectionPoint *next;
 };
 
-typedef struct {
-    HRESULT (*query_interface)(HTMLDocument*,REFIID,void**);
-    ULONG (*addref)(HTMLDocument*);
-    ULONG (*release)(HTMLDocument*);
-} htmldoc_vtbl_t;
-
 struct HTMLDocument {
     DispatchEx dispex;
-    const htmldoc_vtbl_t                  *vtbl;
     const IHTMLDocument2Vtbl              *lpHTMLDocument2Vtbl;
     const IHTMLDocument3Vtbl              *lpHTMLDocument3Vtbl;
     const IHTMLDocument4Vtbl              *lpHTMLDocument4Vtbl;
@@ -277,6 +270,8 @@ struct HTMLDocument {
     const IDispatchExVtbl                 *lpIDispatchExVtbl;
     const ISupportErrorInfoVtbl           *lpSupportErrorInfoVtbl;
 
+    IUnknown *unk_impl;
+
     HTMLDocumentObj *doc_obj;
     HTMLDocumentNode *doc_node;
 
@@ -292,17 +287,17 @@ struct HTMLDocument {
 
 static inline HRESULT htmldoc_query_interface(HTMLDocument *This, REFIID riid, void **ppv)
 {
-    return This->vtbl->query_interface(This, riid, ppv);
+    return IUnknown_QueryInterface(This->unk_impl, riid, ppv);
 }
 
 static inline ULONG htmldoc_addref(HTMLDocument *This)
 {
-    return This->vtbl->addref(This);
+    return IUnknown_AddRef(This->unk_impl);
 }
 
 static inline ULONG htmldoc_release(HTMLDocument *This)
 {
-    return This->vtbl->release(This);
+    return IUnknown_Release(This->unk_impl);
 }
 
 struct HTMLDocumentObj {




More information about the wine-cvs mailing list