From: Gabriel Ivăncescu gabrielopcode@gmail.com
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com --- dlls/mshtml/htmlnode.c | 76 +++++++----------------------------------- 1 file changed, 12 insertions(+), 64 deletions(-)
diff --git a/dlls/mshtml/htmlnode.c b/dlls/mshtml/htmlnode.c index 0d9a5259935..1a4f7cda40e 100644 --- a/dlls/mshtml/htmlnode.c +++ b/dlls/mshtml/htmlnode.c @@ -44,70 +44,27 @@ typedef struct { } HTMLDOMChildrenCollection;
typedef struct { - IEnumVARIANT IEnumVARIANT_iface; - - LONG ref; - + CollectionEnum colenum; ULONG iter; - HTMLDOMChildrenCollection *col; } HTMLDOMChildrenCollectionEnum;
static inline HTMLDOMChildrenCollectionEnum *impl_from_IEnumVARIANT(IEnumVARIANT *iface) { - return CONTAINING_RECORD(iface, HTMLDOMChildrenCollectionEnum, IEnumVARIANT_iface); -} - -static HRESULT WINAPI HTMLDOMChildrenCollectionEnum_QueryInterface(IEnumVARIANT *iface, REFIID riid, void **ppv) -{ - HTMLDOMChildrenCollectionEnum *This = impl_from_IEnumVARIANT(iface); - - TRACE("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv); - - if(IsEqualGUID(riid, &IID_IUnknown)) { - *ppv = &This->IEnumVARIANT_iface; - }else if(IsEqualGUID(riid, &IID_IEnumVARIANT)) { - *ppv = &This->IEnumVARIANT_iface; - }else { - FIXME("(%p)->(%s %p)\n", This, debugstr_mshtml_guid(riid), ppv); - *ppv = NULL; - return E_NOINTERFACE; - } - - IUnknown_AddRef((IUnknown*)*ppv); - return S_OK; + return CONTAINING_RECORD(iface, HTMLDOMChildrenCollectionEnum, colenum.IEnumVARIANT_iface); }
-static ULONG WINAPI HTMLDOMChildrenCollectionEnum_AddRef(IEnumVARIANT *iface) -{ - HTMLDOMChildrenCollectionEnum *This = impl_from_IEnumVARIANT(iface); - LONG ref = InterlockedIncrement(&This->ref); - - TRACE("(%p) ref=%ld\n", This, ref); - - return ref; -} - -static ULONG WINAPI HTMLDOMChildrenCollectionEnum_Release(IEnumVARIANT *iface) +static inline HTMLDOMChildrenCollection *impl_from_DispatchEx(DispatchEx *iface) { - HTMLDOMChildrenCollectionEnum *This = impl_from_IEnumVARIANT(iface); - LONG ref = InterlockedDecrement(&This->ref); - - TRACE("(%p) ref=%ld\n", This, ref); - - if(!ref) { - IHTMLDOMChildrenCollection_Release(&This->col->IHTMLDOMChildrenCollection_iface); - free(This); - } - - return ref; + return CONTAINING_RECORD(iface, HTMLDOMChildrenCollection, dispex); }
static ULONG get_enum_len(HTMLDOMChildrenCollectionEnum *This) { + HTMLDOMChildrenCollection *col = impl_from_DispatchEx(This->colenum.disp); UINT32 len; nsresult nsres;
- nsres = nsIDOMNodeList_GetLength(This->col->nslist, &len); + nsres = nsIDOMNodeList_GetLength(col->nslist, &len); assert(nsres == NS_OK); return len; } @@ -115,6 +72,7 @@ static ULONG get_enum_len(HTMLDOMChildrenCollectionEnum *This) static HRESULT WINAPI HTMLDOMChildrenCollectionEnum_Next(IEnumVARIANT *iface, ULONG celt, VARIANT *rgVar, ULONG *pCeltFetched) { HTMLDOMChildrenCollectionEnum *This = impl_from_IEnumVARIANT(iface); + HTMLDOMChildrenCollection *col = impl_from_DispatchEx(This->colenum.disp); ULONG fetched = 0, len; nsIDOMNode *nsnode; HTMLDOMNode *node; @@ -126,7 +84,7 @@ static HRESULT WINAPI HTMLDOMChildrenCollectionEnum_Next(IEnumVARIANT *iface, UL len = get_enum_len(This);
while(This->iter+fetched < len && fetched < celt) { - nsres = nsIDOMNodeList_Item(This->col->nslist, This->iter+fetched, &nsnode); + nsres = nsIDOMNodeList_Item(col->nslist, This->iter+fetched, &nsnode); assert(nsres == NS_OK);
hres = get_node(nsnode, TRUE, &node); @@ -183,9 +141,9 @@ static HRESULT WINAPI HTMLDOMChildrenCollectionEnum_Clone(IEnumVARIANT *iface, I }
static const IEnumVARIANTVtbl HTMLDOMChildrenCollectionEnumVtbl = { - HTMLDOMChildrenCollectionEnum_QueryInterface, - HTMLDOMChildrenCollectionEnum_AddRef, - HTMLDOMChildrenCollectionEnum_Release, + CollectionEnum_QueryInterface, + CollectionEnum_AddRef, + CollectionEnum_Release, HTMLDOMChildrenCollectionEnum_Next, HTMLDOMChildrenCollectionEnum_Skip, HTMLDOMChildrenCollectionEnum_Reset, @@ -223,14 +181,9 @@ static HRESULT WINAPI HTMLDOMChildrenCollection_get__newEnum(IHTMLDOMChildrenCol if(!ret) return E_OUTOFMEMORY;
- ret->IEnumVARIANT_iface.lpVtbl = &HTMLDOMChildrenCollectionEnumVtbl; - ret->ref = 1; ret->iter = 0;
- IHTMLDOMChildrenCollection_AddRef(&This->IHTMLDOMChildrenCollection_iface); - ret->col = This; - - *p = (IUnknown*)&ret->IEnumVARIANT_iface; + *p = CollectionEnum_init(&ret->colenum, &This->dispex, &HTMLDOMChildrenCollectionEnumVtbl); return S_OK; }
@@ -282,11 +235,6 @@ static const IHTMLDOMChildrenCollectionVtbl HTMLDOMChildrenCollectionVtbl = { HTMLDOMChildrenCollection_item };
-static inline HTMLDOMChildrenCollection *impl_from_DispatchEx(DispatchEx *iface) -{ - return CONTAINING_RECORD(iface, HTMLDOMChildrenCollection, dispex); -} - static void *HTMLDOMChildrenCollection_query_interface(DispatchEx *dispex, REFIID riid) { HTMLDOMChildrenCollection *This = impl_from_DispatchEx(dispex);