Interface Technology Basics  VST 3.7
SDK for developing VST plug-in
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
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
 

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

#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) ) \
}
#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
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 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 (); }
#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; \
}
#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); \
}
#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 IMPLEMENT_FUNKNOWN_METHODS (   ClassName,
  InterfaceName,
  ClassIID 
)
Value:
IMPLEMENT_REFCOUNT (ClassName) \
IMPLEMENT_QUERYINTERFACE (ClassName, InterfaceName, ClassIID)
Empty

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