| // 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 |