Interface Technology Basics  VST 3.7
SDK for developing VST plug-in
funknown.h File Reference

Classes

class  FUID
 Handling 16 Byte Globally Unique Identifiers. More...
 
class  FUnknown
 The basic interface of all interfaces. More...
 
class  FUnknownPtr< I >
 FUnknownPtr - automatic interface conversion and smart pointer in one. More...
 
struct  FReleaser
 Release an interface using automatic object (obsolete). More...
 

Namespaces

 Steinberg
 This header provides classes for working with FUnknown.
 
 Steinberg::FUnknownPrivate
 

Macros

#define INLINE_UID(l1, l2, l3, l4)
 
#define DECLARE_UID(name, l1, l2, l3, l4)   SMTG_CONSTEXPR14 ::Steinberg::TUID name = INLINE_UID (l1, l2, l3, l4);
 
#define EXTERN_UID(name)   extern const ::Steinberg::TUID name;
 
#define DECLARE_CLASS_IID(ClassName, l1, l2, l3, l4)   static SMTG_CONSTEXPR14 const ::Steinberg::TUID ClassName##_iid = INLINE_UID (l1, l2, l3, l4);
 
#define DEF_CLASS_IID(ClassName)   const ::Steinberg::FUID ClassName::iid (ClassName##_iid);
 
#define INLINE_UID_OF(ClassName)   ClassName##_iid
 
#define INLINE_UID_FROM_FUID(x)   INLINE_UID (x.getLong1 (), x.getLong2 (), x.getLong3 (), x.getLong4 ())
 
#define DECLARE_FUNKNOWN_METHODS
 
#define DELEGATE_REFCOUNT(ClassName)
 
#define IMPLEMENT_REFCOUNT(ClassName)
 
#define FUNKNOWN_CTOR   { __funknownRefCount = 1; }
 
#define FUNKNOWN_DTOR
 
#define QUERY_INTERFACE(iid, obj, InterfaceIID, InterfaceName)
 
#define IMPLEMENT_QUERYINTERFACE(ClassName, InterfaceName, ClassIID)
 
#define IMPLEMENT_FUNKNOWN_METHODS(ClassName, InterfaceName, ClassIID)
 

Typedefs

typedef int64 LARGE_INT
 
typedef int8 TUID[16]
 plain UID type More...
 

Enumerations

enum  {
  kNoInterface = -1, kResultOk, kResultTrue = kResultOk, kResultFalse,
  kInvalidArgument, kNotImplemented, kInternalError, kNotInitialized,
  kOutOfMemory
}
 

Functions

SMTG_ALWAYS_INLINE bool iidEqual (const void *iid1, const void *iid2)
 
int32 atomicAdd (int32 &var, int32 d)
 
template<typename T >
const TUID & getTUID ()
 

Macro Definition Documentation

◆ INLINE_UID

#define INLINE_UID (   l1,
  l2,
  l3,
  l4 
)
Value:
{ \
(::Steinberg::int8)(((::Steinberg::uint32)(l1) & 0xFF000000) >> 24), (::Steinberg::int8)(((::Steinberg::uint32)(l1) & 0x00FF0000) >> 16), \
(::Steinberg::int8)(((::Steinberg::uint32)(l1) & 0x0000FF00) >> 8), (::Steinberg::int8)(((::Steinberg::uint32)(l1) & 0x000000FF) ), \
(::Steinberg::int8)(((::Steinberg::uint32)(l2) & 0xFF000000) >> 24), (::Steinberg::int8)(((::Steinberg::uint32)(l2) & 0x00FF0000) >> 16), \
(::Steinberg::int8)(((::Steinberg::uint32)(l2) & 0x0000FF00) >> 8), (::Steinberg::int8)(((::Steinberg::uint32)(l2) & 0x000000FF) ), \
(::Steinberg::int8)(((::Steinberg::uint32)(l3) & 0xFF000000) >> 24), (::Steinberg::int8)(((::Steinberg::uint32)(l3) & 0x00FF0000) >> 16), \
(::Steinberg::int8)(((::Steinberg::uint32)(l3) & 0x0000FF00) >> 8), (::Steinberg::int8)(((::Steinberg::uint32)(l3) & 0x000000FF) ), \
(::Steinberg::int8)(((::Steinberg::uint32)(l4) & 0xFF000000) >> 24), (::Steinberg::int8)(((::Steinberg::uint32)(l4) & 0x00FF0000) >> 16), \
(::Steinberg::int8)(((::Steinberg::uint32)(l4) & 0x0000FF00) >> 8), (::Steinberg::int8)(((::Steinberg::uint32)(l4) & 0x000000FF) ) \
}
unsigned int uint32
Definition: ftypes.h:51
char int8
Definition: ftypes.h:39

◆ DECLARE_UID

#define DECLARE_UID (   name,
  l1,
  l2,
  l3,
  l4 
)    SMTG_CONSTEXPR14 ::Steinberg::TUID name = INLINE_UID (l1, l2, l3, l4);

◆ EXTERN_UID

#define EXTERN_UID (   name)    extern const ::Steinberg::TUID name;

◆ DECLARE_CLASS_IID

#define DECLARE_CLASS_IID (   ClassName,
  l1,
  l2,
  l3,
  l4 
)    static SMTG_CONSTEXPR14 const ::Steinberg::TUID ClassName##_iid = INLINE_UID (l1, l2, l3, l4);

◆ DEF_CLASS_IID

#define DEF_CLASS_IID (   ClassName)    const ::Steinberg::FUID ClassName::iid (ClassName##_iid);

◆ INLINE_UID_OF

#define INLINE_UID_OF (   ClassName)    ClassName##_iid

◆ INLINE_UID_FROM_FUID

#define INLINE_UID_FROM_FUID (   x)    INLINE_UID (x.getLong1 (), x.getLong2 (), x.getLong3 (), x.getLong4 ())

◆ DECLARE_FUNKNOWN_METHODS

#define DECLARE_FUNKNOWN_METHODS
Value:
public: \
virtual ::Steinberg::tresult PLUGIN_API queryInterface (const ::Steinberg::TUID _iid, void** obj) SMTG_OVERRIDE; \
virtual ::Steinberg::uint32 PLUGIN_API release () SMTG_OVERRIDE; \
protected : \
::Steinberg::int32 __funknownRefCount; \
public:
unsigned int uint32
Definition: ftypes.h:51
#define SMTG_OVERRIDE
Definition: fplatform.h:276
int8 TUID[16]
plain UID type
Definition: funknown.h:209
int32 tresult
Definition: ftypes.h:76
This header provides classes for working with FUnknown.
Definition: conststringtable.cpp:21
int int32
Definition: ftypes.h:50

◆ DELEGATE_REFCOUNT

#define DELEGATE_REFCOUNT (   ClassName)
Value:
public: \
virtual ::Steinberg::uint32 PLUGIN_API addRef () SMTG_OVERRIDE { return ClassName::addRef (); } \
virtual ::Steinberg::uint32 PLUGIN_API release () SMTG_OVERRIDE { return ClassName::release (); }
unsigned int uint32
Definition: ftypes.h:51
#define SMTG_OVERRIDE
Definition: fplatform.h:276

◆ IMPLEMENT_REFCOUNT

#define IMPLEMENT_REFCOUNT (   ClassName)
Value:
::Steinberg::uint32 PLUGIN_API ClassName::addRef () \
{ \
} \
::Steinberg::uint32 PLUGIN_API ClassName::release () \
{ \
if (::Steinberg::FUnknownPrivate::atomicAdd (__funknownRefCount, -1) == 0) \
{ \
delete this; \
return 0; \
} \
return __funknownRefCount; \
}
unsigned int uint32
Definition: ftypes.h:51
int32 atomicAdd(int32 &var, int32 d)
Definition: funknown.cpp:88

◆ FUNKNOWN_CTOR

#define FUNKNOWN_CTOR   { __funknownRefCount = 1; }

◆ FUNKNOWN_DTOR

#define FUNKNOWN_DTOR

◆ QUERY_INTERFACE

#define QUERY_INTERFACE (   iid,
  obj,
  InterfaceIID,
  InterfaceName 
)
Value:
if (::Steinberg::FUnknownPrivate::iidEqual (iid, InterfaceIID)) \
{ \
addRef (); \
*obj = static_cast< InterfaceName* >(this); \
}
SMTG_ALWAYS_INLINE bool iidEqual(const void *iid1, const void *iid2)
Definition: funknown.h:223
Definition: funknown.h:192

◆ IMPLEMENT_QUERYINTERFACE

#define IMPLEMENT_QUERYINTERFACE (   ClassName,
  InterfaceName,
  ClassIID 
)
Value:
::Steinberg::tresult PLUGIN_API ClassName::queryInterface (const ::Steinberg::TUID _iid, void** obj)\
{ \
QUERY_INTERFACE (_iid, obj, ::Steinberg::FUnknown::iid, InterfaceName) \
QUERY_INTERFACE (_iid, obj, ClassIID, InterfaceName) \
*obj = nullptr; \
}
static const FUID iid
Definition: funknown.h:390
int8 TUID[16]
plain UID type
Definition: funknown.h:209
int32 tresult
Definition: ftypes.h:76
Definition: funknown.h:191

◆ IMPLEMENT_FUNKNOWN_METHODS

#define IMPLEMENT_FUNKNOWN_METHODS (   ClassName,
  InterfaceName,
  ClassIID 
)
Value:
IMPLEMENT_REFCOUNT (ClassName) \
IMPLEMENT_QUERYINTERFACE (ClassName, InterfaceName, ClassIID)
#define IMPLEMENT_REFCOUNT(ClassName)
Definition: funknown.h:105
Empty

Copyright ©2021 Steinberg Media Technologies GmbH. All Rights Reserved. This documentation is under this license.