9 #include <nx/sdk/ptr.h> 63 static constexpr
int kMinSize = 16;
64 static constexpr
int minSize() {
return kMinSize; }
70 bool operator==(
const InterfaceId& other)
const {
return strcmp(value, other.value) == 0; }
71 bool operator!=(
const InterfaceId& other)
const {
return !(*
this == other); }
79 static_assert(len + 1 >= InterfaceId::minSize(),
80 "Interface id is too short");
82 return reinterpret_cast<const InterfaceId*
>(charArray);
102 template<
class TemplateInstance,
class TemplateArg,
int len>
105 static_assert(len + 2 + 1 >= InterfaceId::minSize(),
106 "Base part of interface id is too short");
107 static_assert(std::is_base_of<IRefCountable, TemplateInstance>::value,
108 "TemplateInstance must be inherited from IRefCountable");
109 static_assert(std::is_base_of<IRefCountable, TemplateArg>::value,
110 "TemplateArg must be inherited from IRefCountable");
112 static const std::string
id =
113 std::string(&baseIdCharArray[0]) +
"<" + &TemplateArg::interfaceId()->value[0] +
">";
115 return reinterpret_cast<const InterfaceId*
>(
id.c_str());
136 template<
class Interface>
139 return toPtr(static_cast<Interface*>(queryInterface(Interface::interfaceId())));
142 template<
class Interface>
143 Ptr<const Interface> queryInterface()
const 145 return toPtr(static_cast<const Interface*>(
146 const_cast<IRefCountable*>(
this)->queryInterface(Interface::interfaceId())));
153 virtual int addRef()
const = 0;
167 const void* this_ =
this;
168 if (this_ ==
nullptr)
Definition: i_ref_countable.h:61
static const InterfaceId * makeIdForTemplate(const char(&baseIdCharArray)[len])
Definition: i_ref_countable.h:103
virtual int releaseRef() const =0
virtual IRefCountable * queryInterface(const InterfaceId *id)
Definition: i_ref_countable.h:125
virtual ~IRefCountable()=default
int refCountThreadUnsafe() const
Definition: i_ref_countable.h:165
Definition: apple_utils.h:6
static auto interfaceId()
Definition: i_ref_countable.h:87
virtual int addRef() const =0
Definition: i_ref_countable.h:49
static constexpr const InterfaceId * makeId(const char(&charArray)[len])
Definition: i_ref_countable.h:77