static HRESULT WINAPI xmlelem_collection_IEnumVARIANT_Skip( IEnumVARIANT *iface, ULONG celt) { xmlelem_collection *This = impl_from_IEnumVARIANT(iface); FIXME("(%p)->(%d): stub\n", This, celt); return E_NOTIMPL; }
static HRESULT WINAPI enumvariant_Clone( IEnumVARIANT *iface, IEnumVARIANT **ppenum) { enumvariant *This = impl_from_IEnumVARIANT( iface ); FIXME("(%p)->(%p): stub\n", This, ppenum); return E_NOTIMPL; }
static HRESULT WINAPI HTMLDOMChildrenCollectionEnum_Next(IEnumVARIANT *iface, ULONG celt, VARIANT *rgVar, ULONG *pCeltFetched) { HTMLDOMChildrenCollectionEnum *This = impl_from_IEnumVARIANT(iface); ULONG fetched = 0, len; nsIDOMNode *nsnode; HTMLDOMNode *node; nsresult nsres; HRESULT hres; TRACE("(%p)->(%d %p %p)\n", This, celt, rgVar, pCeltFetched); len = get_enum_len(This); while(This->iter+fetched < len && fetched < celt) { nsres = nsIDOMNodeList_Item(This->col->nslist, This->iter+fetched, &nsnode); assert(nsres == NS_OK); hres = get_node(This->col->doc, nsnode, TRUE, &node); nsIDOMNode_Release(nsnode); if(FAILED(hres)) { ERR("get_node failed: %08x\n", hres); break; } V_VT(rgVar+fetched) = VT_DISPATCH; IHTMLDOMNode_AddRef(&node->IHTMLDOMNode_iface); V_DISPATCH(rgVar+fetched) = (IDispatch*)&node->IHTMLDOMNode_iface; fetched++; } This->iter += fetched; if(pCeltFetched) *pCeltFetched = fetched; return fetched == celt ? S_OK : S_FALSE; }
static HRESULT WINAPI dict_enum_Next(IEnumVARIANT *iface, ULONG count, VARIANT *keys, ULONG *fetched) { struct dictionary_enum *This = impl_from_IEnumVARIANT(iface); struct keyitem_pair *pair; ULONG i = 0; TRACE("(%p)->(%u %p %p)\n", This, count, keys, fetched); if (fetched) *fetched = 0; if (!count) return S_OK; while (This->cur && i < count) { pair = LIST_ENTRY(This->cur, struct keyitem_pair, entry); VariantCopy(&keys[i], &pair->key); This->cur = list_next(&This->dict->pairs, This->cur); i++; } if (fetched) *fetched = i; return i < count ? S_FALSE : S_OK; }
static HRESULT WINAPI xmlelem_collection_IEnumVARIANT_Reset( IEnumVARIANT *iface) { xmlelem_collection *This = impl_from_IEnumVARIANT(iface); This->current = This->node; return S_OK; }
static HRESULT WINAPI xmlelem_collection_IEnumVARIANT_Clone( IEnumVARIANT *iface, IEnumVARIANT **ppEnum) { xmlelem_collection *This = impl_from_IEnumVARIANT(iface); FIXME("(%p)->(%p): stub\n", This, ppEnum); return E_NOTIMPL; }
static ULONG WINAPI enumvariant_AddRef(IEnumVARIANT *iface ) { enumvariant *This = impl_from_IEnumVARIANT( iface ); ULONG ref = InterlockedIncrement( &This->ref ); TRACE("(%p)->(%d)\n", This, ref); return ref; }
static HRESULT WINAPI enumvar_Next(IEnumVARIANT *iface, ULONG celt, VARIANT *var, ULONG *fetched) { EnumVARIANT *enumvar = impl_from_IEnumVARIANT(iface); LONG i; TRACE("%p,%u,%p,%p\n", iface, celt, var, fetched); for (i = 0; i < celt && enumvar->pos < enumvar->folders->count; i++) { ITaskFolder *folder; HRESULT hr; hr = TaskFolder_create(enumvar->folders->path, enumvar->folders->list[enumvar->pos++], &folder, FALSE); if (hr) return hr; if (!var) { ITaskFolder_Release(folder); return E_POINTER; } V_VT(&var[i]) = VT_DISPATCH; V_DISPATCH(&var[i]) = (IDispatch *)folder; } if (fetched) *fetched = i; return i == celt ? S_OK : S_FALSE; }
static HRESULT WINAPI xmlelem_collection_IEnumVARIANT_Next( IEnumVARIANT *iface, ULONG celt, VARIANT *rgVar, ULONG *fetched) { xmlelem_collection *This = impl_from_IEnumVARIANT(iface); xmlNodePtr ptr = This->current; TRACE("(%p)->(%d %p %p)\n", This, celt, rgVar, fetched); if (!rgVar) return E_INVALIDARG; /* FIXME: handle celt */ if (fetched) *fetched = 1; if (This->current) This->current = This->current->next; else { V_VT(rgVar) = VT_EMPTY; if (fetched) *fetched = 0; return S_FALSE; } V_VT(rgVar) = VT_DISPATCH; return XMLElement_create(ptr, (LPVOID *)&V_DISPATCH(rgVar), FALSE); }
/* IEnumVARIANT support */ static HRESULT WINAPI enumvariant_QueryInterface( IEnumVARIANT *iface, REFIID riid, void** ppvObject ) { enumvariant *This = impl_from_IEnumVARIANT( iface ); TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject); *ppvObject = NULL; if (IsEqualGUID( riid, &IID_IUnknown )) { if (This->own) *ppvObject = &This->IEnumVARIANT_iface; else return IUnknown_QueryInterface(This->outer, riid, ppvObject); } else if (IsEqualGUID( riid, &IID_IEnumVARIANT )) { *ppvObject = &This->IEnumVARIANT_iface; } else return IUnknown_QueryInterface(This->outer, riid, ppvObject); IEnumVARIANT_AddRef( iface ); return S_OK; }
static HRESULT WINAPI enumvar_Clone(IEnumVARIANT *iface, IEnumVARIANT **penum) { EnumVARIANT *enumvar = impl_from_IEnumVARIANT(iface); TRACE("%p,%p\n", iface, penum); return NewEnum_create(enumvar->folders, (IUnknown **)penum); }
static HRESULT WINAPI xmlelem_collection_IEnumVARIANT_Reset( IEnumVARIANT *iface) { xmlelem_collection *This = impl_from_IEnumVARIANT(iface); TRACE("(%p)\n", This); This->current = This->node->children; return S_OK; }
static HRESULT WINAPI enumvariant_Skip( IEnumVARIANT *iface, ULONG celt) { enumvariant *This = impl_from_IEnumVARIANT( iface ); FIXME("(%p)->(%u): stub\n", This, celt); return E_NOTIMPL; }
static ULONG WINAPI HTMLElementCollectionEnum_AddRef(IEnumVARIANT *iface) { HTMLElementCollectionEnum *This = impl_from_IEnumVARIANT(iface); LONG ref = InterlockedIncrement(&This->ref); TRACE("(%p) ref=%d\n", This, ref); return ref; }
static HRESULT WINAPI HTMLElementCollectionEnum_Reset(IEnumVARIANT *iface) { HTMLElementCollectionEnum *This = impl_from_IEnumVARIANT(iface); TRACE("(%p)->()\n", This); This->iter = 0; return S_OK; }
static HRESULT WINAPI dict_enum_Reset(IEnumVARIANT *iface) { struct dictionary_enum *This = impl_from_IEnumVARIANT(iface); TRACE("(%p)\n", This); This->cur = list_head(&This->dict->pairs); return S_OK; }
static HRESULT WINAPI enumvar_Reset(IEnumVARIANT *iface) { EnumVARIANT *enumvar = impl_from_IEnumVARIANT(iface); TRACE("%p\n", iface); enumvar->pos = 0; return S_OK; }
static ULONG WINAPI enumvar_Release(IEnumVARIANT *iface) { EnumVARIANT *enumvar = impl_from_IEnumVARIANT(iface); LONG ref = InterlockedDecrement(&enumvar->ref); if (!ref) { TRACE("destroying %p\n", iface); ITaskFolderCollection_Release(&enumvar->folders->ITaskFolderCollection_iface); heap_free(enumvar); } return ref; }
static ULONG WINAPI HTMLElementCollectionEnum_Release(IEnumVARIANT *iface) { HTMLElementCollectionEnum *This = impl_from_IEnumVARIANT(iface); LONG ref = InterlockedDecrement(&This->ref); TRACE("(%p) ref=%d\n", This, ref); if(!ref) { IHTMLElementCollection_Release(&This->col->IHTMLElementCollection_iface); heap_free(This); } return ref; }
static ULONG WINAPI enumvariant_Release(IEnumVARIANT *iface ) { enumvariant *This = impl_from_IEnumVARIANT( iface ); ULONG ref = InterlockedDecrement(&This->ref); TRACE("(%p)->(%d)\n", This, ref); if ( ref == 0 ) { if (This->own) IXMLDOMSelection_Release(This->selection); heap_free(This); } return ref; }
static HRESULT WINAPI HTMLElementCollectionEnum_Skip(IEnumVARIANT *iface, ULONG celt) { HTMLElementCollectionEnum *This = impl_from_IEnumVARIANT(iface); TRACE("(%p)->(%d)\n", This, celt); if(This->iter + celt > This->col->len) { This->iter = This->col->len; return S_FALSE; } This->iter += celt; return S_OK; }
static HRESULT WINAPI HTMLDOMChildrenCollectionEnum_Skip(IEnumVARIANT *iface, ULONG celt) { HTMLDOMChildrenCollectionEnum *This = impl_from_IEnumVARIANT(iface); ULONG len; TRACE("(%p)->(%d)\n", This, celt); len = get_enum_len(This); if(This->iter + celt > len) { This->iter = len; return S_FALSE; } This->iter += celt; return S_OK; }
static HRESULT WINAPI enumvar_Skip(IEnumVARIANT *iface, ULONG celt) { EnumVARIANT *enumvar = impl_from_IEnumVARIANT(iface); TRACE("%p,%u\n", iface, celt); enumvar->pos += celt; if (enumvar->pos > enumvar->folders->count) { enumvar->pos = enumvar->folders->count; return S_FALSE; } return S_OK; }
static ULONG WINAPI dict_enum_Release(IEnumVARIANT *iface) { struct dictionary_enum *This = impl_from_IEnumVARIANT(iface); LONG ref; TRACE("(%p)\n", This); ref = InterlockedDecrement(&This->ref); if(ref == 0) { list_remove(&This->notify); IDictionary_Release(&This->dict->IDictionary_iface); heap_free(This); } return ref; }
static HRESULT WINAPI dict_enum_QueryInterface(IEnumVARIANT *iface, REFIID riid, void **obj) { struct dictionary_enum *This = impl_from_IEnumVARIANT(iface); TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), obj); if (IsEqualIID(riid, &IID_IEnumVARIANT) || IsEqualIID(riid, &IID_IUnknown)) { *obj = iface; IEnumVARIANT_AddRef(iface); return S_OK; } else { WARN("interface not supported %s\n", debugstr_guid(riid)); *obj = NULL; return E_NOINTERFACE; } }
static HRESULT WINAPI dict_enum_Skip(IEnumVARIANT *iface, ULONG count) { struct dictionary_enum *This = impl_from_IEnumVARIANT(iface); TRACE("(%p)->(%u)\n", This, count); if (!count) return S_OK; if (!This->cur) return S_FALSE; while (count--) { This->cur = list_next(&This->dict->pairs, This->cur); if (!This->cur) break; } return count == 0 ? S_OK : S_FALSE; }
static HRESULT WINAPI HTMLElementCollectionEnum_Next(IEnumVARIANT *iface, ULONG celt, VARIANT *rgVar, ULONG *pCeltFetched) { HTMLElementCollectionEnum *This = impl_from_IEnumVARIANT(iface); ULONG fetched = 0; TRACE("(%p)->(%d %p %p)\n", This, celt, rgVar, pCeltFetched); while(This->iter+fetched < This->col->len && fetched < celt) { V_VT(rgVar+fetched) = VT_DISPATCH; V_DISPATCH(rgVar+fetched) = (IDispatch*)&This->col->elems[This->iter+fetched]->IHTMLElement_iface; IDispatch_AddRef(V_DISPATCH(rgVar+fetched)); fetched++; } This->iter += fetched; if(pCeltFetched) *pCeltFetched = fetched; return fetched == celt ? S_OK : S_FALSE; }
/************************************************************************ * xmlelem_collection implementation of IEnumVARIANT. */ static HRESULT WINAPI xmlelem_collection_IEnumVARIANT_QueryInterface( IEnumVARIANT *iface, REFIID riid, LPVOID *ppvObj) { xmlelem_collection *this = impl_from_IEnumVARIANT(iface); TRACE("(%p)->(%s %p)\n", this, debugstr_guid(riid), ppvObj); if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IEnumVARIANT)) { *ppvObj = iface; IEnumVARIANT_AddRef(iface); return S_OK; } FIXME("interface %s not implemented\n", debugstr_guid(riid)); *ppvObj = NULL; return E_NOINTERFACE; }
static HRESULT WINAPI HTMLElementCollectionEnum_QueryInterface(IEnumVARIANT *iface, REFIID riid, void **ppv) { HTMLElementCollectionEnum *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("Unsupported iface %s\n", debugstr_mshtml_guid(riid)); *ppv = NULL; return E_NOINTERFACE; } IUnknown_AddRef((IUnknown*)*ppv); return S_OK; }
static HRESULT WINAPI enumvariant_Next( IEnumVARIANT *iface, ULONG celt, VARIANT *var, ULONG *fetched) { enumvariant *This = impl_from_IEnumVARIANT( iface ); IXMLDOMNode *node; ULONG ret_count = 0; TRACE("(%p)->(%u %p %p)\n", This, celt, var, fetched); if (fetched) *fetched = 0; if (celt && !var) return E_INVALIDARG; for (; celt > 0; celt--, var++, This->pos++) { IDispatch *disp = NULL; HRESULT hr; node = NULL; hr = IXMLDOMSelection_get_item(This->selection, This->pos, &node); if (hr != S_OK) break; IXMLDOMNode_QueryInterface(node, &IID_IDispatch, (void**)&disp); IXMLDOMNode_Release(node); V_VT(var) = VT_DISPATCH; V_DISPATCH(var) = disp; ret_count++; } if (fetched) (*fetched)++; /* we need to advance one step more for some reason */ if (ret_count) IXMLDOMSelection_nextNode(This->selection, &node); return celt == 0 ? S_OK : S_FALSE; }