blob: 6006ea93ff3108dfa249f6e2c267911304c2fcab [file] [log] [blame]
// Copyright (c) 2010 The WebM project authors. All Rights Reserved.
//
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file in the root of the source
// tree. An additional intellectual property rights grant can be found
// in the file PATENTS. All contributing project authors may
// be found in the AUTHORS file in the root of the source tree.
#include <strmif.h>
#include "cenumpins.h"
#include <new>
CEnumPins::CEnumPins(IPin* const* a, ULONG n)
{
m_pins.reserve(n);
for (ULONG i = 0; i < n; ++i)
{
IPin* const p = a[i];
p->AddRef();
m_pins.push_back(p);
}
}
CEnumPins::~CEnumPins()
{
while (!m_pins.empty())
{
IPin* const p = m_pins.back();
m_pins.pop_back();
p->Release();
}
}
CEnumPins::CEnumPins(const CEnumPins& rhs)
{
const pins_t::size_type n = rhs.m_pins.size();
m_pins.reserve(n);
for (ULONG i = 0; i < n; ++i)
{
IPin* const p = rhs.m_pins[i];
p->AddRef();
m_pins.push_back(p);
}
}
HRESULT CEnumPins::Clone(IEnumPins** pp)
{
if (pp == 0)
return E_POINTER;
IEnumPins*& p = *pp;
p = new (std::nothrow) CEnumPins(*this);
return p ? S_OK : E_OUTOFMEMORY;
}
HRESULT CEnumPins::GetCount(ULONG& n) const
{
const pins_t::size_type size = m_pins.size();
n = static_cast<ULONG>(size);
return S_OK;
}
HRESULT CEnumPins::GetItem(ULONG i, IPin*& p)
{
p = m_pins[i];
p->AddRef();
return S_OK;
}
void CEnumPins::ReleaseItems(IPin** a, ULONG n)
{
for (ULONG i = 0; i < n; ++i)
{
IPin* const p = a[i];
p->Release();
}
}
HRESULT CEnumPins::CreateInstance(
IPin* const* a,
ULONG n,
IEnumPins** pp)
{
if (pp == 0)
return E_POINTER;
IEnumPins*& p = *pp;
p = new (std::nothrow) CEnumPins(a, n);
return p ? S_OK : E_OUTOFMEMORY;
}