24#if SMTG_CPP11_STDLIBSUPPORT
37#define INLINE_UID(l1, l2, l3, l4) \
39 (::Steinberg::int8)(((::Steinberg::uint32)(l1) & 0x000000FF) ), (::Steinberg::int8)(((::Steinberg::uint32)(l1) & 0x0000FF00) >> 8), \
40 (::Steinberg::int8)(((::Steinberg::uint32)(l1) & 0x00FF0000) >> 16), (::Steinberg::int8)(((::Steinberg::uint32)(l1) & 0xFF000000) >> 24), \
41 (::Steinberg::int8)(((::Steinberg::uint32)(l2) & 0x00FF0000) >> 16), (::Steinberg::int8)(((::Steinberg::uint32)(l2) & 0xFF000000) >> 24), \
42 (::Steinberg::int8)(((::Steinberg::uint32)(l2) & 0x000000FF) ), (::Steinberg::int8)(((::Steinberg::uint32)(l2) & 0x0000FF00) >> 8), \
43 (::Steinberg::int8)(((::Steinberg::uint32)(l3) & 0xFF000000) >> 24), (::Steinberg::int8)(((::Steinberg::uint32)(l3) & 0x00FF0000) >> 16), \
44 (::Steinberg::int8)(((::Steinberg::uint32)(l3) & 0x0000FF00) >> 8), (::Steinberg::int8)(((::Steinberg::uint32)(l3) & 0x000000FF) ), \
45 (::Steinberg::int8)(((::Steinberg::uint32)(l4) & 0xFF000000) >> 24), (::Steinberg::int8)(((::Steinberg::uint32)(l4) & 0x00FF0000) >> 16), \
46 (::Steinberg::int8)(((::Steinberg::uint32)(l4) & 0x0000FF00) >> 8), (::Steinberg::int8)(((::Steinberg::uint32)(l4) & 0x000000FF) ) \
49#define INLINE_UID(l1, l2, l3, l4) \
51 (::Steinberg::int8)(((::Steinberg::uint32)(l1) & 0xFF000000) >> 24), (::Steinberg::int8)(((::Steinberg::uint32)(l1) & 0x00FF0000) >> 16), \
52 (::Steinberg::int8)(((::Steinberg::uint32)(l1) & 0x0000FF00) >> 8), (::Steinberg::int8)(((::Steinberg::uint32)(l1) & 0x000000FF) ), \
53 (::Steinberg::int8)(((::Steinberg::uint32)(l2) & 0xFF000000) >> 24), (::Steinberg::int8)(((::Steinberg::uint32)(l2) & 0x00FF0000) >> 16), \
54 (::Steinberg::int8)(((::Steinberg::uint32)(l2) & 0x0000FF00) >> 8), (::Steinberg::int8)(((::Steinberg::uint32)(l2) & 0x000000FF) ), \
55 (::Steinberg::int8)(((::Steinberg::uint32)(l3) & 0xFF000000) >> 24), (::Steinberg::int8)(((::Steinberg::uint32)(l3) & 0x00FF0000) >> 16), \
56 (::Steinberg::int8)(((::Steinberg::uint32)(l3) & 0x0000FF00) >> 8), (::Steinberg::int8)(((::Steinberg::uint32)(l3) & 0x000000FF) ), \
57 (::Steinberg::int8)(((::Steinberg::uint32)(l4) & 0xFF000000) >> 24), (::Steinberg::int8)(((::Steinberg::uint32)(l4) & 0x00FF0000) >> 16), \
58 (::Steinberg::int8)(((::Steinberg::uint32)(l4) & 0x0000FF00) >> 8), (::Steinberg::int8)(((::Steinberg::uint32)(l4) & 0x000000FF) ) \
63#define DECLARE_UID(name, l1, l2, l3, l4) ::Steinberg::TUID name = INLINE_UID (l1, l2, l3, l4);
66#define EXTERN_UID(name) extern const ::Steinberg::TUID name;
69#define DECLARE_CLASS_IID(ClassName, l1, l2, l3, l4) \
70 static const ::Steinberg::TUID ClassName##_iid = INLINE_UID (l1, l2, l3, l4); \
72const ::Steinberg::FUID ClassName::iid (ClassName##_iid);
74#define DECLARE_CLASS_IID(ClassName, l1, l2, l3, l4) \
75 static const ::Steinberg::TUID ClassName##_iid = INLINE_UID (l1, l2, l3, l4);
78#define DEF_CLASS_IID(ClassName) const ::Steinberg::FUID ClassName::iid (ClassName##_iid);
80#define INLINE_UID_OF(ClassName) ClassName##_iid
82#define INLINE_UID_FROM_FUID(x) \
83 INLINE_UID (x.getLong1 (), x.getLong2 (), x.getLong3 (), x.getLong4 ())
89#define DECLARE_FUNKNOWN_METHODS \
91 virtual ::Steinberg::tresult PLUGIN_API queryInterface (const ::Steinberg::TUID _iid, void** obj) SMTG_OVERRIDE; \
92 virtual ::Steinberg::uint32 PLUGIN_API addRef () SMTG_OVERRIDE; \
93 virtual ::Steinberg::uint32 PLUGIN_API release () SMTG_OVERRIDE; \
95 ::Steinberg::int32 __funknownRefCount; \
100#define DELEGATE_REFCOUNT(ClassName) \
102 virtual ::Steinberg::uint32 PLUGIN_API addRef () SMTG_OVERRIDE { return ClassName::addRef (); } \
103 virtual ::Steinberg::uint32 PLUGIN_API release () SMTG_OVERRIDE { return ClassName::release (); }
106#define IMPLEMENT_REFCOUNT(ClassName) \
107::Steinberg::uint32 PLUGIN_API ClassName::addRef () \
109 return ::Steinberg::FUnknownPrivate::atomicAdd (__funknownRefCount, 1); \
111::Steinberg::uint32 PLUGIN_API ClassName::release () \
113 if (::Steinberg::FUnknownPrivate::atomicAdd (__funknownRefCount, -1) == 0) \
118 return __funknownRefCount; \
122#define FUNKNOWN_CTOR { __funknownRefCount = 1; }
123#if SMTG_FUNKNOWN_DTOR_ASSERT
125#define FUNKNOWN_DTOR { assert (__funknownRefCount == 0); }
131#define QUERY_INTERFACE(iid, obj, InterfaceIID, InterfaceName) \
132if (::Steinberg::FUnknownPrivate::iidEqual (iid, InterfaceIID)) \
135 *obj = static_cast< InterfaceName* >(this); \
136 return ::Steinberg::kResultOk; \
140#define IMPLEMENT_QUERYINTERFACE(ClassName, InterfaceName, ClassIID) \
141::Steinberg::tresult PLUGIN_API ClassName::queryInterface (const ::Steinberg::TUID _iid, void** obj)\
143 QUERY_INTERFACE (_iid, obj, ::Steinberg::FUnknown::iid, InterfaceName) \
144 QUERY_INTERFACE (_iid, obj, ClassIID, InterfaceName) \
146 return ::Steinberg::kNoInterface; \
150#define IMPLEMENT_FUNKNOWN_METHODS(ClassName,InterfaceName,ClassIID) \
151 IMPLEMENT_REFCOUNT (ClassName) \
152 IMPLEMENT_QUERYINTERFACE (ClassName, InterfaceName, ClassIID)
217 const uint64* p1 =
reinterpret_cast<const uint64*
> (iid1);
218 const uint64* p2 =
reinterpret_cast<const uint64*
> (iid2);
219 return p1[0] == p2[0] && p1[1] == p2[1];
241#if SMTG_CPP11_STDLIBSUPPORT
311#if SMTG_CPP11_STDLIBSUPPORT
312 static_assert (
N ==
sizeof (
TUID),
"only TUID allowed");
317 inline operator const TUID& ()
const {
return data; }
333#if SMTG_CPP11_STDLIBSUPPORT
338 std::is_same<typename std::remove_cv<T>::type,
FUID>
::value,
339 "Do not compare a FUID with a TUID directly. Either convert the TUID to a FUID and compare them or use FUnknownPrivate::iidEqual");
340 return f1.operator== (f2);
415 inline I* operator= (
FUnknown* unknown);
418#if SMTG_CPP11_STDLIBSUPPORT
428#if SMTG_CPP11_STDLIBSUPPORT
434struct Void : std::false_type
440using VoidT =
typename Void<T>::Type;
447template <
typename T,
typename U =
void>
448struct HasIIDType : std::false_type
454struct HasIIDType<T, FUnknownPrivate::VoidT<typename T::IID>> : std::true_type
464 typename std::enable_if<FUnknownPrivate::HasIIDType<T>::value>
::type* =
nullptr>
467 return T::IID::toTUID ();
473 typename std::enable_if<!FUnknownPrivate::HasIIDType<T>::value>
::type* =
nullptr>
476 return T::iid.toTUID ();
484 return T::iid.toTUID ();
CAdPlugDatabase::CRecord::RecordType type
Definition adplugdb.cpp:93
Definition funknown.h:233
FUID()
Definition funknown.cpp:119
FUID(const int8(&uid)[N])
Definition funknown.h:309
bool operator==(const FUID &f) const
Definition funknown.h:256
uint32 getLong1() const
Definition funknown.cpp:256
FUID & operator=(const FUID &f)
Definition funknown.cpp:200
void toString(char8 *string) const
Definition funknown.cpp:296
char8 String[33]
Definition funknown.h:268
void from4Int(uint32 d1, uint32 d2, uint32 d3, uint32 d4)
Definition funknown.cpp:207
bool fromRegistryString(const char8 *string)
Definition funknown.cpp:345
bool operator<(const FUID &f) const
Definition funknown.h:257
uint32 getLong2() const
Definition funknown.cpp:266
void print(char8 *string=nullptr, int32 style=kINLINE_UID) const
Definition funknown.cpp:414
bool operator!=(const FUID &f) const
Definition funknown.h:258
TUID data
Definition funknown.h:330
bool fromString(const char8 *string)
Definition funknown.cpp:314
bool isValid() const
Definition funknown.cpp:192
void toRegistryString(char8 *string) const
Definition funknown.cpp:383
UIDPrintStyle
Definition funknown.h:297
@ kCLASS_UID
"DECLARE_CLASS_IID (Interface, 0x00000000, 0x00000000, 0x00000000, 0x00000000)"
Definition funknown.h:301
@ kDECLARE_UID
"DECLARE_UID (0x00000000, 0x00000000, 0x00000000, 0x00000000)"
Definition funknown.h:299
@ kINLINE_UID
"INLINE_UID (0x00000000, 0x00000000, 0x00000000, 0x00000000)"
Definition funknown.h:298
@ kFUID
"FUID (0x00000000, 0x00000000, 0x00000000, 0x00000000)"
Definition funknown.h:300
virtual ~FUID()
Definition funknown.h:239
void toTUID(TUID result) const
Definition funknown.h:316
const TUID & toTUID() const
Definition funknown.h:318
static FUID fromTUID(const TUID uid)
Definition funknown.h:320
uint32 getLong3() const
Definition funknown.cpp:276
void to4Int(uint32 &d1, uint32 &d2, uint32 &d3, uint32 &d4) const
Definition funknown.cpp:247
uint32 getLong4() const
Definition funknown.cpp:286
bool generate()
Definition funknown.cpp:151
Definition funknown.h:361
virtual uint32 PLUGIN_API addRef()=0
virtual uint32 PLUGIN_API release()=0
virtual tresult PLUGIN_API queryInterface(const TUID _iid, void **obj)=0
static const FUID iid
Definition funknown.h:382
Definition funknown.h:403
FUnknownPtr(const FUnknownPtr &p)
Definition funknown.h:407
FUnknownPtr & operator=(const FUnknownPtr &p)
Definition funknown.h:410
I * getInterface()
Definition funknown.h:416
FUnknownPtr(FUnknown *unknown)
Definition funknown.h:491
FUnknownPtr()
Definition funknown.h:408
Definition smartpointer.h:44
I * ptr
Definition smartpointer.h:121
I * operator=(I *ptr)
Definition smartpointer.h:159
IPtr(I *ptr, bool addRef=true)
Definition smartpointer.h:126
Definition smartpointer.h:210
unsigned f
Definition inflate.c:1572
#define SMTG_ALWAYS_INLINE
Definition ftypes.h:185
#define DECLARE_CLASS_IID(ClassName, l1, l2, l3, l4)
Definition funknown.h:74
static PuglViewHint int value
Definition pugl.h:1708
Definition funknown.cpp:86
int32 PLUGIN_API atomicAdd(int32 &var, int32 d)
Definition funknown.cpp:88
SMTG_ALWAYS_INLINE bool iidEqual(const void *iid1, const void *iid2)
Definition funknown.h:215
Definition baseiids.cpp:43
unsigned long long uint64
Definition ftypes.h:67
int64 LARGE_INT
Definition funknown.h:205
int int32
Definition ftypes.h:50
char char8
Definition ftypes.h:93
int8 TUID[16]
plain UID type
Definition funknown.h:210
char int8
Definition ftypes.h:39
@ kNoInterface
Definition funknown.h:192
@ kResultOk
Definition funknown.h:193
@ kInvalidArgument
Definition funknown.h:196
@ kInternalError
Definition funknown.h:198
@ kOutOfMemory
Definition funknown.h:200
@ kNotImplemented
Definition funknown.h:197
@ kResultFalse
Definition funknown.h:195
@ kResultTrue
Definition funknown.h:194
@ kNotInitialized
Definition funknown.h:199
long long int64
Definition ftypes.h:66
int32 tresult
Definition ftypes.h:76
unsigned int uint32
Definition ftypes.h:51
bool operator==(const ConstString &s1, const ConstString &s2)
Definition fstring.h:665
const TUID & getTUID()
Definition funknown.h:482
void Void
Definition juce_Functional.h:30
Type
Definition Lv2Ports.h:60
#define N
Definition nseel-cfunc.c:36
FReleaser(FUnknown *u)
Definition funknown.h:540
FUnknown * u
Definition funknown.h:546
~FReleaser()
Definition funknown.h:541
uch * p
Definition crypt.c:594
memcpy(hh, h, RAND_HEAD_LEN)
int result
Definition process.c:1455
#define void
Definition unzip.h:396