1// Copyright (c) 2012 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#ifndef BASE_WIN_IUNKNOWN_IMPL_H_
6#define BASE_WIN_IUNKNOWN_IMPL_H_
7
8#include <unknwn.h>
9
10#include "base/atomic_ref_count.h"
11#include "base/base_export.h"
12#include "base/compiler_specific.h"
13
14namespace base {
15namespace win {
16
17// IUnknown implementation for other classes to derive from.
18class BASE_EXPORT IUnknownImpl : public IUnknown {
19 public:
20  IUnknownImpl();
21
22  virtual ULONG STDMETHODCALLTYPE AddRef() OVERRIDE;
23  virtual ULONG STDMETHODCALLTYPE Release() OVERRIDE;
24
25  // Subclasses should extend this to return any interfaces they provide.
26  virtual STDMETHODIMP QueryInterface(REFIID riid, void** ppv) OVERRIDE;
27
28 protected:
29  virtual ~IUnknownImpl();
30
31 private:
32  AtomicRefCount ref_count_;
33};
34
35}  // namespace win
36}  // namespace base
37
38#endif  // BASE_WIN_IUNKNOWN_IMPL_H_
39