xbmc
DVDResource.h
1 /*
2  * Copyright (C) 2005-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #include <assert.h>
12 #include <atomic>
13 
14 template<typename T> struct IDVDResourceCounted
15 {
16  IDVDResourceCounted() : m_refs(1) {}
17  virtual ~IDVDResourceCounted() = default;
18 
19  IDVDResourceCounted(const IDVDResourceCounted &) = delete;
20  IDVDResourceCounted &operator=(const IDVDResourceCounted &) = delete;
21 
22  virtual T* Acquire()
23  {
24  ++m_refs;
25  return static_cast<T*>(this);
26  }
27 
28  virtual long Release()
29  {
30  long count = --m_refs;
31  assert(count >= 0);
32  if (count == 0)
33  delete static_cast<T*>(this);
34  return count;
35  }
36  std::atomic<long> m_refs;
37 };
Definition: DVDResource.h:14