10 #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);
86 template<
int len,
int alternativeLen>
88 const char (&charArray)[len],
const char (&alternativeCharArray)[alternativeLen])
90 static_assert(len + 1 >= InterfaceId::minSize(),
91 "Interface id is too short");
92 static_assert(alternativeLen + 1 >= InterfaceId::minSize(),
93 "Alternative interface id is too short");
97 reinterpret_cast<const InterfaceId*>(alternativeCharArray),
119 template<
class TemplateInstance,
class TemplateArg,
int len>
122 static_assert(len + 2 + 1 >= InterfaceId::minSize(),
123 "Base part of interface id is too short");
124 static_assert(std::is_base_of<IRefCountable, TemplateInstance>::value,
125 "TemplateInstance must be inherited from IRefCountable");
126 static_assert(std::is_base_of<IRefCountable, TemplateArg>::value,
127 "TemplateArg must be inherited from IRefCountable");
129 static const std::string
id =
130 std::string(&baseIdCharArray[0]) +
"<" + &TemplateArg::interfaceId()->value[0] +
">";
132 return reinterpret_cast<const InterfaceId*
>(
id.c_str());
135 static std::vector<const InterfaceId*> alternativeInterfaceIds(
const InterfaceId*
id)
137 return std::vector<const InterfaceId*>(1, id);
140 static std::vector<const InterfaceId*> alternativeInterfaceIds(std::vector<const InterfaceId*> ids)
163 template<
class Interface>
166 for (
const auto&
id: alternativeInterfaceIds(Interface::interfaceId()))
169 return Ptr(static_cast<Interface*>(refCountable));
174 template<
class Interface>
175 Ptr<const Interface> queryInterface()
const 178 return const_cast<IRefCountable*
>(
this)->queryInterface<const Interface>();
185 virtual int addRef()
const = 0;
199 const void* this_ =
this;
200 if (this_ ==
nullptr)
Definition: i_ref_countable.h:61
static const InterfaceId * makeIdForTemplate(const char(&baseIdCharArray)[len])
Definition: i_ref_countable.h:120
virtual int releaseRef() const =0
virtual ~IRefCountable()=default
int refCountThreadUnsafe() const
Definition: i_ref_countable.h:197
static auto interfaceId()
Definition: i_ref_countable.h:103
Definition: device_agent.h:13
virtual int addRef() const =0
Definition: i_ref_countable.h:49
static std::vector< const InterfaceId * > makeIdWithAlternative(const char(&charArray)[len], const char(&alternativeCharArray)[alternativeLen])
Definition: i_ref_countable.h:87
static const InterfaceId * makeId(const char(&charArray)[len])
Definition: i_ref_countable.h:77