2 * Schema cache implementation
4 * Copyright 2007 Huw Davies
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
32 #include "wine/debug.h"
34 #include "msxml_private.h"
36 WINE_DEFAULT_DEBUG_CHANNEL(msxml
);
41 const struct IXMLDOMSchemaCollectionVtbl
*lpVtbl
;
45 static inline schema_t
*impl_from_IXMLDOMSchemaCollection( IXMLDOMSchemaCollection
*iface
)
47 return (schema_t
*)((char*)iface
- FIELD_OFFSET(schema_t
, lpVtbl
));
50 static HRESULT WINAPI
schema_cache_QueryInterface( IXMLDOMSchemaCollection
*iface
, REFIID riid
, void** ppvObject
)
52 schema_t
*This
= impl_from_IXMLDOMSchemaCollection( iface
);
54 TRACE("%p %s %p\n", This
, debugstr_guid( riid
), ppvObject
);
56 if ( IsEqualIID( riid
, &IID_IUnknown
) ||
57 IsEqualIID( riid
, &IID_IDispatch
) ||
58 IsEqualIID( riid
, &IID_IXMLDOMSchemaCollection
) )
64 FIXME("interface %s not implemented\n", debugstr_guid(riid
));
68 IXMLDOMSchemaCollection_AddRef( iface
);
73 static ULONG WINAPI
schema_cache_AddRef( IXMLDOMSchemaCollection
*iface
)
75 schema_t
*This
= impl_from_IXMLDOMSchemaCollection( iface
);
76 LONG ref
= InterlockedIncrement( &This
->ref
);
77 TRACE("%p new ref %d\n", This
, ref
);
81 static ULONG WINAPI
schema_cache_Release( IXMLDOMSchemaCollection
*iface
)
83 schema_t
*This
= impl_from_IXMLDOMSchemaCollection( iface
);
84 LONG ref
= InterlockedDecrement( &This
->ref
);
85 TRACE("%p new ref %d\n", This
, ref
);
89 HeapFree( GetProcessHeap(), 0, This
);
95 static HRESULT WINAPI
schema_cache_GetTypeInfoCount( IXMLDOMSchemaCollection
*iface
, UINT
* pctinfo
)
97 schema_t
*This
= impl_from_IXMLDOMSchemaCollection( iface
);
99 TRACE("(%p)->(%p)\n", This
, pctinfo
);
106 static HRESULT WINAPI
schema_cache_GetTypeInfo( IXMLDOMSchemaCollection
*iface
,
107 UINT iTInfo
, LCID lcid
, ITypeInfo
** ppTInfo
)
109 schema_t
*This
= impl_from_IXMLDOMSchemaCollection( iface
);
112 TRACE("(%p)->(%u %u %p)\n", This
, iTInfo
, lcid
, ppTInfo
);
114 hr
= get_typeinfo(IXMLDOMSchemaCollection_tid
, ppTInfo
);
119 static HRESULT WINAPI
schema_cache_GetIDsOfNames( IXMLDOMSchemaCollection
*iface
,
126 schema_t
*This
= impl_from_IXMLDOMSchemaCollection( iface
);
130 TRACE("(%p)->(%s %p %u %u %p)\n", This
, debugstr_guid(riid
), rgszNames
, cNames
,
133 if(!rgszNames
|| cNames
== 0 || !rgDispId
)
136 hr
= get_typeinfo(IXMLDOMSchemaCollection_tid
, &typeinfo
);
139 hr
= ITypeInfo_GetIDsOfNames(typeinfo
, rgszNames
, cNames
, rgDispId
);
140 ITypeInfo_Release(typeinfo
);
146 static HRESULT WINAPI
schema_cache_Invoke( IXMLDOMSchemaCollection
*iface
,
151 DISPPARAMS
* pDispParams
,
153 EXCEPINFO
* pExcepInfo
,
156 schema_t
*This
= impl_from_IXMLDOMSchemaCollection( iface
);
160 TRACE("(%p)->(%d %s %d %d %p %p %p %p)\n", This
, dispIdMember
, debugstr_guid(riid
),
161 lcid
, wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
163 hr
= get_typeinfo(IXMLDOMSchemaCollection_tid
, &typeinfo
);
166 hr
= ITypeInfo_Invoke(typeinfo
, &(This
->lpVtbl
), dispIdMember
, wFlags
, pDispParams
,
167 pVarResult
, pExcepInfo
, puArgErr
);
168 ITypeInfo_Release(typeinfo
);
174 static HRESULT WINAPI
schema_cache_add( IXMLDOMSchemaCollection
*iface
, BSTR uri
, VARIANT var
)
176 FIXME("(%p)->(%s, var(vt %x)): stub\n", iface
, debugstr_w(uri
), V_VT(&var
));
180 static HRESULT WINAPI
schema_cache_get( IXMLDOMSchemaCollection
*iface
, BSTR uri
, IXMLDOMNode
**node
)
186 static HRESULT WINAPI
schema_cache_remove( IXMLDOMSchemaCollection
*iface
, BSTR uri
)
192 static HRESULT WINAPI
schema_cache_get_length( IXMLDOMSchemaCollection
*iface
, LONG
*length
)
198 static HRESULT WINAPI
schema_cache_get_namespaceURI( IXMLDOMSchemaCollection
*iface
, LONG index
, BSTR
*len
)
204 static HRESULT WINAPI
schema_cache_addCollection( IXMLDOMSchemaCollection
*iface
, IXMLDOMSchemaCollection
*otherCollection
)
210 static HRESULT WINAPI
schema_cache_get__newEnum( IXMLDOMSchemaCollection
*iface
, IUnknown
**ppUnk
)
216 static const struct IXMLDOMSchemaCollectionVtbl schema_vtbl
=
218 schema_cache_QueryInterface
,
220 schema_cache_Release
,
221 schema_cache_GetTypeInfoCount
,
222 schema_cache_GetTypeInfo
,
223 schema_cache_GetIDsOfNames
,
228 schema_cache_get_length
,
229 schema_cache_get_namespaceURI
,
230 schema_cache_addCollection
,
231 schema_cache_get__newEnum
234 HRESULT
SchemaCache_create(IUnknown
*pUnkOuter
, LPVOID
*ppObj
)
236 schema_t
*schema
= HeapAlloc( GetProcessHeap(), 0, sizeof (*schema
) );
238 return E_OUTOFMEMORY
;
240 schema
->lpVtbl
= &schema_vtbl
;
243 *ppObj
= &schema
->lpVtbl
;