• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "base/win/iunknown_impl.h"
6 
7 namespace base {
8 namespace win {
9 
IUnknownImpl()10 IUnknownImpl::IUnknownImpl()
11     : ref_count_(0) {
12 }
13 
~IUnknownImpl()14 IUnknownImpl::~IUnknownImpl() {
15 }
16 
AddRef()17 ULONG STDMETHODCALLTYPE IUnknownImpl::AddRef() {
18   base::AtomicRefCountInc(&ref_count_);
19   return 1;
20 }
21 
Release()22 ULONG STDMETHODCALLTYPE IUnknownImpl::Release() {
23   if (!base::AtomicRefCountDec(&ref_count_)) {
24     delete this;
25     return 0;
26   }
27   return 1;
28 }
29 
QueryInterface(REFIID riid,void ** ppv)30 STDMETHODIMP IUnknownImpl::QueryInterface(REFIID riid, void** ppv) {
31   if (riid == IID_IUnknown) {
32     *ppv = static_cast<IUnknown*>(this);
33     AddRef();
34     return S_OK;
35   }
36 
37   *ppv = NULL;
38   return E_NOINTERFACE;
39 }
40 
41 }  // namespace win
42 }  // namespace base
43