9 #include <nx/sdk/ptr.h> 62 static constexpr
int kMinSize = 16;
63 static constexpr
int minSize() {
return kMinSize; }
69 bool operator==(
const InterfaceId& other)
const {
return strcmp(value, other.value) == 0; }
70 bool operator!=(
const InterfaceId& other)
const {
return !(*
this == other); }
78 static_assert(len + 1 >= InterfaceId::minSize(),
79 "Interface id is too short");
81 return reinterpret_cast<const InterfaceId*
>(charArray);
101 template<
class TemplateInstance,
class TemplateArg,
int len>
104 static_assert(len + 2 + 1 >= InterfaceId::minSize(),
105 "Base part of interface id is too short");
106 static_assert(std::is_base_of<IRefCountable, TemplateInstance>::value,
107 "TemplateInstance must be inherited from IRefCountable");
108 static_assert(std::is_base_of<IRefCountable, TemplateArg>::value,
109 "TemplateArg must be inherited from IRefCountable");
111 static const std::string
id =
112 std::string(&baseIdCharArray[0]) +
"<" + &TemplateArg::interfaceId()->value[0] +
">";
114 return reinterpret_cast<const InterfaceId*
>(
id.c_str());
135 template<
class Interface>
138 return Ptr(static_cast<Interface*>(queryInterface(Interface::interfaceId())));
141 template<
class Interface>
142 Ptr<const Interface> queryInterface()
const 144 return Ptr(static_cast<const Interface*>(
145 const_cast<IRefCountable*>(
this)->queryInterface(Interface::interfaceId())));
152 virtual int addRef()
const = 0;
166 const void* this_ =
this;
167 if (this_ ==
nullptr)
Definition: i_ref_countable.h:60
static const InterfaceId * makeIdForTemplate(const char(&baseIdCharArray)[len])
Definition: i_ref_countable.h:102
virtual int releaseRef() const =0
virtual ~IRefCountable()=default
int refCountThreadUnsafe() const
Definition: i_ref_countable.h:164
static auto interfaceId()
Definition: i_ref_countable.h:86
Definition: device_agent.h:13
virtual int addRef() const =0
Definition: i_ref_countable.h:48
static constexpr const InterfaceId * makeId(const char(&charArray)[len])
Definition: i_ref_countable.h:76