Interface Technology Basics  VST 3.6.14
SDK for developing VST Plug-in
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
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
 
 Steinberg::FUnknownPrivate
 

Macros

#define INLINE_UID(l1, l2, l3, l4)
 
#define DECLARE_UID(name, l1, l2, l3, l4)   ::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 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)
 

Macro Definition Documentation

#define INLINE_UID (   l1,
  l2,
  l3,
  l4 
)
Value:
{ \
(::Steinberg::int8)((l1 & 0xFF000000) >> 24), (::Steinberg::int8)((l1 & 0x00FF0000) >> 16), \
(::Steinberg::int8)((l1 & 0x0000FF00) >> 8), (::Steinberg::int8)((l1 & 0x000000FF) ), \
(::Steinberg::int8)((l2 & 0xFF000000) >> 24), (::Steinberg::int8)((l2 & 0x00FF0000) >> 16), \
(::Steinberg::int8)((l2 & 0x0000FF00) >> 8), (::Steinberg::int8)((l2 & 0x000000FF) ), \
(::Steinberg::int8)((l3 & 0xFF000000) >> 24), (::Steinberg::int8)((l3 & 0x00FF0000) >> 16), \
(::Steinberg::int8)((l3 & 0x0000FF00) >> 8), (::Steinberg::int8)((l3 & 0x000000FF) ), \
(::Steinberg::int8)((l4 & 0xFF000000) >> 24), (::Steinberg::int8)((l4 & 0x00FF0000) >> 16), \
(::Steinberg::int8)((l4 & 0x0000FF00) >> 8), (::Steinberg::int8)((l4 & 0x000000FF) ) \
}
char int8
Definition: ftypes.h:39
#define DECLARE_UID (   name,
  l1,
  l2,
  l3,
  l4 
)    ::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 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
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:218
int8 TUID[16]
plain UID type
Definition: funknown.h:202
int32 tresult
Definition: ftypes.h:76
int int32
Definition: ftypes.h:50
#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:218
#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:84
#define FUNKNOWN_CTOR   { __funknownRefCount = 1; }
#define FUNKNOWN_DTOR
#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:207
Definition: funknown.h:185
#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; \
}
#define QUERY_INTERFACE(iid, obj, InterfaceIID, InterfaceName)
Definition: funknown.h:123
static const FUID iid
Definition: funknown.h:375
int8 TUID[16]
plain UID type
Definition: funknown.h:202
int32 tresult
Definition: ftypes.h:76
Definition: funknown.h:184
#define IMPLEMENT_FUNKNOWN_METHODS (   ClassName,
  InterfaceName,
  ClassIID 
)
Value:
IMPLEMENT_REFCOUNT (ClassName) \
IMPLEMENT_QUERYINTERFACE (ClassName, InterfaceName, ClassIID)
#define IMPLEMENT_QUERYINTERFACE(ClassName, InterfaceName, ClassIID)
Definition: funknown.h:132
#define IMPLEMENT_REFCOUNT(ClassName)
Definition: funknown.h:103
Empty

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