ReactOS 0.4.16-dev-197-g92996da
enumpins.cpp
Go to the documentation of this file.
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Network Provider for MPEG2 based networks
4 * FILE: dll/directx/msdvbnp/enumpins.cpp
5 * PURPOSE: IEnumPins interface
6 *
7 * PROGRAMMERS: Johannes Anderwald (johannes.anderwald@reactos.org)
8 */
9#include "precomp.h"
10
11class CEnumPins : public IEnumPins
12{
13public:
15
17 {
19 return m_Ref;
20 }
22 {
24 if (!m_Ref)
25 {
26 delete this;
27 return 0;
28 }
29 return m_Ref;
30 }
31
32
33 HRESULT STDMETHODCALLTYPE Next(ULONG cPins, IPin **ppPins, ULONG *pcFetched);
37
38 CEnumPins(ULONG NumPins, IPin ** pins) : m_Ref(0), m_NumPins(NumPins), m_Pins(pins), m_Index(0){};
39 virtual ~CEnumPins(){};
40
41protected:
42 LONG m_Ref;
46};
47
51 IN REFIID refiid,
53{
54 if (IsEqualGUID(refiid, IID_IUnknown))
55 {
56 *Output = PVOID(this);
57 reinterpret_cast<IUnknown*>(*Output)->AddRef();
58 return NOERROR;
59 }
60 if (IsEqualGUID(refiid, IID_IEnumPins))
61 {
62 *Output = (IEnumPins*)(this);
63 reinterpret_cast<IEnumPins*>(*Output)->AddRef();
64 return NOERROR;
65 }
66
69 StringFromCLSID(refiid, &lpstr);
70 swprintf(Buffer, L"CEnumPins::QueryInterface: NoInterface for %s\n", lpstr);
73
74 return E_NOINTERFACE;
75}
76
80 ULONG cPins,
81 IPin **ppPins,
82 ULONG *pcFetched)
83{
84 ULONG i = 0;
85
86 if (!ppPins)
87 return E_POINTER;
88
89 if (cPins > 1 && !pcFetched)
90 return E_INVALIDARG;
91
92 while(i < cPins)
93 {
94 if (m_Index + i >= m_NumPins)
95 break;
96
97 ppPins[i] = m_Pins[m_Index + i];
98 m_Pins[m_Index + i]->AddRef();
99
100 i++;
101 }
102
103 if (pcFetched)
104 {
105 *pcFetched = i;
106 }
107
108 m_Index += i;
109
110 if (i < cPins)
111 return S_FALSE;
112 else
113 return S_OK;
114}
115
119 ULONG cPins)
120{
121 if (cPins + m_Index >= m_NumPins)
122 {
123 return S_FALSE;
124 }
125
126 m_Index += cPins;
127 return S_OK;
128}
129
133{
134 m_Index = 0;
135 return S_OK;
136}
137
141 IEnumPins **ppEnum)
142{
143 OutputDebugStringW(L"CEnumPins::Clone : NotImplemented\n");
144 return E_NOTIMPL;
145}
146
148WINAPI
151 ULONG NumPins,
152 IPin ** pins,
153 REFIID riid,
154 LPVOID * ppv)
155{
156 CEnumPins * handler = new CEnumPins(NumPins, pins);
157
158 if (!handler)
159 return E_OUTOFMEMORY;
160
161 if (FAILED(handler->QueryInterface(riid, ppv)))
162 {
163 /* not supported */
164 delete handler;
165 return E_NOINTERFACE;
166 }
167
168 return NOERROR;
169}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define STDMETHODIMP
Definition: basetyps.h:43
const GUID IID_IUnknown
#define STDMETHODCALLTYPE
Definition: bdasup.h:9
Definition: bufpool.h:45
STDMETHODIMP_(ULONG) Release()
Definition: enumpins.cpp:21
ULONG m_NumPins
Definition: enumpins.cpp:43
CEnumPins(ULONG NumPins, IPin **pins)
Definition: enumpins.cpp:38
IPin ** m_Pins
Definition: enumpins.cpp:44
HRESULT STDMETHODCALLTYPE Reset()
virtual ~CEnumPins()
Definition: enumpins.cpp:39
STDMETHODIMP_(ULONG) AddRef()
Definition: enumpins.cpp:16
LONG m_Ref
Definition: enumpins.cpp:42
HRESULT STDMETHODCALLTYPE Clone(IEnumPins **ppEnum)
HRESULT STDMETHODCALLTYPE Next(ULONG cPins, IPin **ppPins, ULONG *pcFetched)
ULONG m_Index
Definition: enumpins.cpp:44
HRESULT STDMETHODCALLTYPE Skip(ULONG cPins)
std::vector< IPin * > m_Pins
Definition: enumpins.cpp:43
STDMETHODIMP QueryInterface(REFIID InterfaceId, PVOID *Interface)
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define MAX_PATH
Definition: compat.h:34
UINT(* handler)(MSIPACKAGE *)
Definition: action.c:7512
HRESULT WINAPI StringFromCLSID(REFCLSID id, LPOLESTR *idstr)
Definition: compobj.c:2412
#define swprintf
Definition: precomp.h:40
_In_ PUNKNOWN pUnknown
Definition: drmk.h:76
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442
void WINAPI SHIM_OBJ_NAME() OutputDebugStringW(LPCWSTR lpOutputString)
Definition: ignoredbgout.c:23
REFIID riid
Definition: atlbase.h:39
REFIID LPVOID * ppv
Definition: atlbase.h:39
Definition: axcore.idl:92
ULONG AddRef()
ULONG Release()
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
HRESULT WINAPI CEnumPins_fnConstructor(std::vector< IPin * > Pins, REFIID riid, LPVOID *ppv)
Definition: enumpins.cpp:151
static LPCSTR lpstr
Definition: font.c:51
static LPOLESTR
Definition: stg_prop.c:27
#define L(x)
Definition: ntvdm.h:50
long LONG
Definition: pedump.c:60
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define REFIID
Definition: guiddef.h:118
@ Output
Definition: arc.h:85
void * PVOID
Definition: typedefs.h:50
#define IN
Definition: typedefs.h:39
uint32_t ULONG
Definition: typedefs.h:59
#define OUT
Definition: typedefs.h:40
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE Interface
Definition: wdffdo.h:465
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:2357
#define E_NOINTERFACE
Definition: winerror.h:2364
#define NOERROR
Definition: winerror.h:2354
#define E_POINTER
Definition: winerror.h:2365
__wchar_t WCHAR
Definition: xmlstorage.h:180