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(ULONG NumPins
, IPin
** pins
) : m_Ref(0), m_NumPins(NumPins
), m_Pins(pins
), m_Index(0){};
39 virtual ~CEnumPins(){};
50 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
)
94 if (m_Index
+ i
>= m_NumPins
)
97 ppPins
[i
] = m_Pins
[m_Index
+ i
];
98 m_Pins
[m_Index
+ i
]->AddRef();
121 if (cPins
+ m_Index
>= m_NumPins
)
143 OutputDebugStringW(L
"CEnumPins::Clone : NotImplemented\n");
149 CEnumPins_fnConstructor(
156 CEnumPins
* handler
= new CEnumPins(NumPins
, pins
);
159 WCHAR Buffer
[MAX_PATH
];
161 StringFromCLSID(riid
, &lpstr
);
162 swprintf(Buffer
, L
"CEnumPins_fnConstructor riid %s pUnknown %p\n", lpstr
, pUnknown
);
163 OutputDebugStringW(Buffer
);
167 return E_OUTOFMEMORY
;
169 if (FAILED(handler
->QueryInterface(riid
, ppv
)))
173 return E_NOINTERFACE
;