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

namespace  Steinberg
 This header provides classes for working with FUnknown.
 
namespace  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 char 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) ) \
}
uint32_t uint32
Definition: ftypes.h:49
char int8
Definition: ftypes.h:41

◆ 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:
#define SMTG_OVERRIDE
Definition: fplatform.h:295
This header provides classes for working with FUnknown.
Definition: conststringtable.cpp:21
char TUID[16]
plain UID type
Definition: funknown.h:209
int32 tresult
Definition: ftypes.h:66
int32_t int32
Definition: ftypes.h:48

◆ 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 (); }

◆ 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; \
}
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
@ kResultOk
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:391
@ kNoInterface
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 © Steinberg Media Technologies GmbH. All Rights Reserved. This documentation is under this license.