// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "base/win/iunknown_impl.h"

namespace base {
namespace win {

IUnknownImpl::IUnknownImpl()
    : ref_count_(0) {
}

IUnknownImpl::~IUnknownImpl() {
}

ULONG STDMETHODCALLTYPE IUnknownImpl::AddRef() {
  ref_count_.Increment();
  return 1;
}

ULONG STDMETHODCALLTYPE IUnknownImpl::Release() {
  if (!ref_count_.Decrement()) {
    delete this;
    return 0;
  }
  return 1;
}

STDMETHODIMP IUnknownImpl::QueryInterface(REFIID riid, void** ppv) {
  if (riid == IID_IUnknown) {
    *ppv = static_cast<IUnknown*>(this);
    AddRef();
    return S_OK;
  }

  *ppv = NULL;
  return E_NOINTERFACE;
}

}  // namespace win
}  // namespace base
