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();
69 StringFromCLSID(refiid
, &lpstr
);
70 swprintf(Buffer
, L
"CEnumPins::QueryInterface: NoInterface for %s\n", lpstr
);
71 OutputDebugStringW(Buffer
);
89 if (cPins
> 1 && !pcFetched
)
94 if (m_Index
+ i
>= m_Pins
.size())
97 ppPins
[i
] = m_Pins
[m_Index
+ i
];
98 m_Pins
[m_Index
+ i
]->AddRef();
120 if (cPins
+ m_Index
>= m_Pins
.size())
143 OutputDebugStringW(L
"CEnumPins::Clone : NotImplemented\n");
151 CEnumPins_fnConstructor(
152 std::vector
<IPin
*> Pins
,
156 CEnumPins
* handler
= new CEnumPins(Pins
);
159 return E_OUTOFMEMORY
;
161 if (FAILED(handler
->QueryInterface(riid
, ppv
)))
165 return E_NOINTERFACE
;