Interface Technology Basics  VST 3.6.7
SDK for developing VST Plug-in
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Namespaces | Macros | Typedefs | Enumerations | Functions
funknown.h File Reference
#include "pluginterfaces/base/fplatform.h"
#include "pluginterfaces/base/ftypes.h"
#include "pluginterfaces/base/smartpointer.h"
#include <string.h>

Data Structures

class  FUID
 Handling 16 Byte Globaly 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:146
int8 TUID[16]
plain UID type
Definition: funknown.h:200
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:146
#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:68
#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:205
Definition: funknown.h:183
#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:121
static const FUID iid
Definition: funknown.h:363
int8 TUID[16]
plain UID type
Definition: funknown.h:200
int32 tresult
Definition: ftypes.h:76
Definition: funknown.h:182
#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:130
#define IMPLEMENT_REFCOUNT(ClassName)
Definition: funknown.h:101
Empty

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