1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-03-07 01:29:15 +01:00
dxvk/src/util/com/com_object.h

42 lines
671 B
C
Raw Normal View History

2017-10-11 00:41:56 +02:00
#pragma once
#include <atomic>
#include "com_include.h"
2017-10-11 00:41:56 +02:00
namespace dxvk {
template<typename... Base>
class ComObject : public Base... {
public:
virtual ~ComObject() { }
2017-12-12 12:50:52 +01:00
ULONG STDMETHODCALLTYPE AddRef() {
2017-10-11 00:41:56 +02:00
return ++m_refCount;
}
2017-12-12 12:50:52 +01:00
ULONG STDMETHODCALLTYPE Release() {
2017-10-11 00:41:56 +02:00
ULONG refCount = --m_refCount;
if (refCount == 0) {
2017-12-09 23:20:31 +01:00
m_refCount += 0x80000000u;
2017-10-11 00:41:56 +02:00
delete this;
}
2017-10-11 00:41:56 +02:00
return refCount;
}
private:
std::atomic<ULONG> m_refCount = { 0ul };
};
template<typename T>
inline void InitReturnPtr(T** ptr) {
if (ptr != nullptr)
*ptr = nullptr;
}
2017-10-11 00:41:56 +02:00
}