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();
82 if (cPins
> 1 && !pcFetched
)
87 if (m_Index
+ i
>= m_Pins
.size())
90 ppPins
[i
] = m_Pins
[m_Index
+ i
];
91 m_Pins
[m_Index
+ i
]->AddRef();
113 if (cPins
+ m_Index
>= m_Pins
.size())
135 OutputDebugStringW(L
"CEnumPins::Clone : NotImplemented\n");
141 CEnumPins_fnConstructor(
142 std::vector
<IPin
*> Pins
,
146 CEnumPins
* handler
= new CEnumPins(Pins
);
149 return E_OUTOFMEMORY
;
151 if (FAILED(handler
->QueryInterface(riid
, ppv
)))
155 return E_NOINTERFACE
;