Chromium Code Reviews| Index: base/win/iunknown_impl.cc |
| =================================================================== |
| --- base/win/iunknown_impl.cc (revision 0) |
| +++ base/win/iunknown_impl.cc (revision 0) |
| @@ -0,0 +1,41 @@ |
| +// 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_ = 1; |
|
M-A Ruel
2011/11/29 22:12:33
See base/memory/ref_counted.cc. It's highly prefer
|
| +} |
| + |
| +IUnknownImpl::~IUnknownImpl() { |
| +} |
| + |
| +ULONG STDMETHODCALLTYPE IUnknownImpl::AddRef() { |
| + return base::AtomicRefCountIncAndReturnValue(&ref_count_); |
| +} |
| + |
| +ULONG STDMETHODCALLTYPE IUnknownImpl::Release() { |
| + AtomicRefCount new_ref_count = |
| + base::AtomicRefCountDecAndReturnValue(&ref_count_); |
| + if (new_ref_count == 0) |
| + delete this; |
| + return new_ref_count; |
| +} |
| + |
| +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 |