[PATCH 3/5] windows.media.speech: Add IIterable<IInspectable*> stubs.
Bernhard Kölbl
besentv at gmail.com
Wed Mar 30 08:15:24 CDT 2022
To both IVector<IInspectable*> and IVectorView<IInspectable*>.
Signed-off-by: Bernhard Kölbl <besentv at gmail.com>
---
dlls/windows.media.speech/private.h | 1 +
dlls/windows.media.speech/recognizer.c | 1 +
dlls/windows.media.speech/vector.c | 73 ++++++++++++++++++++++++++
3 files changed, 75 insertions(+)
diff --git a/dlls/windows.media.speech/private.h b/dlls/windows.media.speech/private.h
index f7ca87ab393..ba790c361aa 100644
--- a/dlls/windows.media.speech/private.h
+++ b/dlls/windows.media.speech/private.h
@@ -63,6 +63,7 @@ extern IActivationFactory *synthesizer_factory;
struct vector_iids
{
+ const GUID *iterable;
const GUID *vector;
const GUID *view;
};
diff --git a/dlls/windows.media.speech/recognizer.c b/dlls/windows.media.speech/recognizer.c
index cbfe4b71c13..cca3e25d0d6 100644
--- a/dlls/windows.media.speech/recognizer.c
+++ b/dlls/windows.media.speech/recognizer.c
@@ -641,6 +641,7 @@ static HRESULT WINAPI recognizer_factory_Create( ISpeechRecognizerFactory *iface
struct session *session;
struct vector_iids constraints_iids =
{
+ .iterable = &IID_IIterable_ISpeechRecognitionConstraint,
.vector = &IID_IVector_ISpeechRecognitionConstraint,
.view = &IID_IVectorView_ISpeechRecognitionConstraint,
};
diff --git a/dlls/windows.media.speech/vector.c b/dlls/windows.media.speech/vector.c
index 90627fa1c37..bad977fe429 100644
--- a/dlls/windows.media.speech/vector.c
+++ b/dlls/windows.media.speech/vector.c
@@ -781,6 +781,7 @@ error:
struct vector_view_inspectable
{
IVectorView_IInspectable IVectorView_IInspectable_iface;
+ IIterable_IInspectable IIterable_IInspectable_iface;
struct vector_iids iids;
LONG ref;
@@ -808,6 +809,12 @@ static HRESULT WINAPI vector_view_inspectable_QueryInterface( IVectorView_IInspe
return S_OK;
}
+ if (IsEqualGUID(iid, impl->iids.iterable))
+ {
+ IInspectable_AddRef((*out = &impl->IIterable_IInspectable_iface));
+ return S_OK;
+ }
+
WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid));
*out = NULL;
return E_NOINTERFACE;
@@ -931,6 +938,35 @@ static const struct IVectorView_IInspectableVtbl vector_view_inspectable_vtbl =
vector_view_inspectable_GetMany
};
+/*
+ *
+ * IIterable<Inspectable*>
+ *
+ */
+
+DEFINE_IINSPECTABLE_(iterable_view_inspectable, IIterable_IInspectable, struct vector_view_inspectable,
+ view_impl_from_IIterable_IInspectable, IIterable_IInspectable_iface, &impl->IVectorView_IInspectable_iface)
+
+static HRESULT WINAPI iterable_view_inspectable_First( IIterable_IInspectable *iface, IIterator_IInspectable **value )
+{
+ FIXME("iface %p, value %p stub!\n", iface, value);
+ return E_NOTIMPL;
+}
+
+static const struct IIterable_IInspectableVtbl iterable_view_inspectable_vtbl =
+{
+ /* IUnknown methods */
+ iterable_view_inspectable_QueryInterface,
+ iterable_view_inspectable_AddRef,
+ iterable_view_inspectable_Release,
+ /* IInspectable methods */
+ iterable_view_inspectable_GetIids,
+ iterable_view_inspectable_GetRuntimeClassName,
+ iterable_view_inspectable_GetTrustLevel,
+ /* IIterable<IInspectable*> methods */
+ iterable_view_inspectable_First
+};
+
/*
*
* IVector<Inspectable*>
@@ -940,6 +976,7 @@ static const struct IVectorView_IInspectableVtbl vector_view_inspectable_vtbl =
struct vector_inspectable
{
IVector_IInspectable IVector_IInspectable_iface;
+ IIterable_IInspectable IIterable_IInspectable_iface;
struct vector_iids iids;
LONG ref;
@@ -968,6 +1005,12 @@ static HRESULT WINAPI vector_inspectable_QueryInterface( IVector_IInspectable *i
return S_OK;
}
+ if (IsEqualGUID(iid, impl->iids.iterable))
+ {
+ IInspectable_AddRef((*out = &impl->IIterable_IInspectable_iface));
+ return S_OK;
+ }
+
WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid));
*out = NULL;
return E_NOINTERFACE;
@@ -1046,6 +1089,7 @@ static HRESULT WINAPI vector_inspectable_GetView( IVector_IInspectable *iface, I
if (!(view = calloc(1, offsetof(struct vector_view_inspectable, elements[impl->size])))) return E_OUTOFMEMORY;
view->IVectorView_IInspectable_iface.lpVtbl = &vector_view_inspectable_vtbl;
+ view->IIterable_IInspectable_iface.lpVtbl = &iterable_view_inspectable_vtbl;
view->iids = impl->iids;
view->ref = 1;
@@ -1207,6 +1251,34 @@ static const struct IVector_IInspectableVtbl vector_inspectable_vtbl =
vector_inspectable_ReplaceAll
};
+/*
+ *
+ * IIterable<Inspectable*>
+ *
+ */
+
+DEFINE_IINSPECTABLE(iterable_inspectable, IIterable_IInspectable, struct vector_inspectable, IVector_IInspectable_iface)
+
+static HRESULT WINAPI iterable_inspectable_First( IIterable_IInspectable *iface, IIterator_IInspectable **value )
+{
+ FIXME("iface %p, value %p stub!\n", iface, value);
+ return E_NOTIMPL;
+}
+
+static const struct IIterable_IInspectableVtbl iterable_inspectable_vtbl =
+{
+ /* IUnknown methods */
+ iterable_inspectable_QueryInterface,
+ iterable_inspectable_AddRef,
+ iterable_inspectable_Release,
+ /* IInspectable methods */
+ iterable_inspectable_GetIids,
+ iterable_inspectable_GetRuntimeClassName,
+ iterable_inspectable_GetTrustLevel,
+ /* IIterable<IInspectable*> methods */
+ iterable_inspectable_First
+};
+
HRESULT vector_inspectable_create( const struct vector_iids *iids, IVector_IInspectable **out )
{
struct vector_inspectable *impl;
@@ -1215,6 +1287,7 @@ HRESULT vector_inspectable_create( const struct vector_iids *iids, IVector_IInsp
if (!(impl = calloc(1, sizeof(*impl)))) return E_OUTOFMEMORY;
impl->IVector_IInspectable_iface.lpVtbl = &vector_inspectable_vtbl;
+ impl->IIterable_IInspectable_iface.lpVtbl = &iterable_inspectable_vtbl;
impl->iids = *iids;
impl->ref = 1;
--
2.35.1
More information about the wine-devel
mailing list