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<
typename RefCountable>
144 static constexpr std::true_type
test(decltype(T::alternativeInterfaceId())* arg);
147 static constexpr std::false_type
test(...);
150 static constexpr
bool value = decltype(test<RefCountable>(
nullptr))::value;
160 template<
typename RefCountable>
164 template<
class RefCountable>
168 if constexpr (hasAlternativeInterfaceId<RefCountable>)
169 refCountable =
queryInterface(RefCountable::alternativeInterfaceId());
172 return Ptr(static_cast<RefCountable*>(refCountable));
175 template<
class RefCountable>
180 if constexpr (hasAlternativeInterfaceId<RefCountable>)
181 refCountable = nonConstThis->
queryInterface(RefCountable::alternativeInterfaceId());
183 refCountable = nonConstThis->
queryInterface(RefCountable::interfaceId());
184 return Ptr(static_cast<const RefCountable*>(refCountable));
191 virtual int addRef()
const = 0;
205 const void* this_ =
this;
206 if (this_ ==
nullptr)
Definition: i_ref_countable.h:60
static constexpr bool hasAlternativeInterfaceId
Definition: i_ref_countable.h:161
Definition: json_ut.cpp:14
static const InterfaceId * makeIdForTemplate(const char(&baseIdCharArray)[len])
Definition: i_ref_countable.h:102
virtual int releaseRef() const =0
virtual IRefCountable * queryInterface(const InterfaceId *id)
Definition: i_ref_countable.h:124
virtual ~IRefCountable()=default
int refCountThreadUnsafe() const
Definition: i_ref_countable.h:203
static auto interfaceId()
Definition: i_ref_countable.h:86
Definition: device_agent.h:13
Definition: i_ref_countable.h:136
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