mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-12-01 00:37:16 +01:00
22 lines
656 B
C++
22 lines
656 B
C++
#pragma once
|
|
#define WIN32_LEAN_AND_MEAN
|
|
#include <windows.h>
|
|
template <class ifc_t>
|
|
class Countable : public ifc_t
|
|
{
|
|
public:
|
|
Countable()
|
|
{
|
|
ref_count=1;
|
|
}
|
|
|
|
// this needs to be done like this otherwise the destructor doesn't get called properly (we don't want virtual destructor for various reasons)
|
|
#define REFERENCE_COUNT_IMPLEMENTATION size_t AddRef() { return InterlockedIncrement((LONG*)&ref_count); }\
|
|
size_t Release() { if (!ref_count) return ref_count; LONG r = InterlockedDecrement((LONG*)&ref_count); if (!r) delete(this); return r; }
|
|
protected:
|
|
size_t ref_count;
|
|
};
|
|
|
|
#define REFERENCE_COUNTED CB(ADDREF, AddRef); CB(RELEASE, Release);
|
|
|