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
7 * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
11 class CEnumPins
: public IEnumPins
14 STDMETHODIMP
QueryInterface( REFIID InterfaceId
, PVOID
* Interface
);
16 STDMETHODIMP_(ULONG
) AddRef()
18 InterlockedIncrement(&m_Ref
);
21 STDMETHODIMP_(ULONG
) Release()
23 InterlockedDecrement(&m_Ref
);
33 HRESULT STDMETHODCALLTYPE
Next(ULONG cPins
, IPin
**ppPins
, ULONG
*pcFetched
);
34 HRESULT STDMETHODCALLTYPE
Skip(ULONG cPins
);
35 HRESULT STDMETHODCALLTYPE
Reset();
36 HRESULT STDMETHODCALLTYPE
Clone(IEnumPins
**ppEnum
);
38 CEnumPins(std::vector
<IPin
*> Pins
) : m_Ref(0), m_Pins(Pins
), m_Index(0){};
39 virtual ~CEnumPins(){};
43 std::vector
<IPin
*> m_Pins
;
49 CEnumPins::QueryInterface(
54 if (IsEqualGUID(refiid
, IID_IUnknown
))
56 *Output
= PVOID(this);
57 reinterpret_cast<IUnknown
*>(*Output
)->AddRef();
60 if (IsEqualGUID(refiid
, IID_IEnumPins
))
62 *Output
= (IEnumPins
*)(this);
63 reinterpret_cast<IEnumPins
*>(*Output
)->AddRef();
67 WCHAR Buffer
[MAX_PATH
];
69 StringFromCLSID(refiid
, &lpstr
);
70 swprintf(Buffer
, L
"CEnumPins::QueryInterface: NoInterface for %s\n", lpstr
);
71 OutputDebugStringW(Buffer
);
89 if (cPins
> 1 && !pcFetched
)
92 WCHAR Buffer
[MAX_PATH
];
93 swprintf(Buffer
, L
"CEnumPins::Next: this %p m_Index %lx cPins %u\n", this, m_Index
, cPins
);
94 OutputDebugStringW(Buffer
);
98 if (m_Index
+ i
>= m_Pins
.size())
101 ppPins
[i
] = m_Pins
[m_Index
+ i
];
102 m_Pins
[m_Index
+ i
]->AddRef();
113 OutputDebugStringW(L
"CEnumPins::Next: done\n");
125 if (cPins
+ m_Index
>= m_Pins
.size())
147 OutputDebugStringW(L
"CEnumPins::Clone : NotImplemented\n");
153 CEnumPins_fnConstructor(
154 std::vector
<IPin
*> Pins
,
158 CEnumPins
* handler
= new CEnumPins(Pins
);
161 WCHAR Buffer
[MAX_PATH
];
163 StringFromCLSID(riid
, &lpstr
);
164 swprintf(Buffer
, L
"CEnumPins_fnConstructor riid %s pUnknown %p\n", lpstr
, pUnknown
);
165 OutputDebugStringW(Buffer
);
169 return E_OUTOFMEMORY
;
171 if (FAILED(handler
->QueryInterface(riid
, ppv
)))
175 return E_NOINTERFACE
;