7 #ifndef _QITYPE_DETAIL_TYPESTRING_HXX_
8 #define _QITYPE_DETAIL_TYPESTRING_HXX_
19 std::string res(raw.first.first, raw.first.second);
21 raw.second(raw.first);
27 set(storage, val.c_str(), val.size());
36 std::string* ptr = (std::string*)Methods::ptrFromStorage(&storage);
40 void set(
void** storage,
const char* value,
size_t sz)
override
42 std::string* ptr = (std::string*)Methods::ptrFromStorage(storage);
43 ptr->assign(value, sz);
61 void set(
void** storage,
const char* ptr,
size_t sz)
override
87 char* res =
new char[I];
100 void set(
void** storage,
const char* ptr,
size_t sz)
override
111 template<
class Func,
class... Args >
113 -> decltype(std::forward<Func>(f)(std::forward<Args>(args)...))
115 return std::forward<Func>(f)(std::forward<Args>(args)...);
118 template<
class Func,
class Obj,
class... Args >
120 -> decltype((std::forward<Obj>(o).*std::forward<Func>(f))(std::forward<Args>(args)...))
122 return (std::forward<Obj>(o).*std::forward<Func>(f))(std::forward<Args>(args)...);
133 const auto size = s.size() + 1;
134 auto strKeptAlive =
new char[size]();
135 std::copy(begin(s), end(s), strKeptAlive);
153 void set(
void** storage,
const char* ptr,
size_t sz)
override
156 *inst = T(std::string(ptr, sz));
169 template<
typename T,
typename F>
179 #define QI_EQUIVALENT_STRING_REGISTER(type, func) \
180 static bool BOOST_PP_CAT(__qi_registration, __COUNTER__) QI_ATTR_UNUSED \
181 = qi::registerType(qi::typeId<type>(), qi::makeTypeEquivalentString((type*)0, func))
183 #endif // _QITYPE_DETAIL_TYPESTRING_HXX_
void set(void **storage, const char *ptr, size_t sz) override
Set the value of the string.
virtual void * ptrFromStorage(void **)=0
#define _QI_BOUNCE_TYPE_METHODS_NOCLONE(Bounce)
Implement all methods of Type except clone/destroy as bouncers to Bouncer.
void set(void **storage, const char *value, size_t sz) override
Set the value of the string.
StringTypeInterface * makeTypeEquivalentString(T *, F f)
void set(void **storage, const char *ptr, size_t sz) override
Set the value of the string.
#define qiLogCategory(Cat)
boost::function< void(const RawString &)> Deleter
void destroy(void *ptr) override
Free all resources of a storage.
DefaultTypeImplMethods< T, TypeByPointerPOD< T >> Impl
StringTypeInterface::ManagedRawString makeManagedString(const std::string &s)
std::pair< RawString, Deleter > ManagedRawString
#define qiLogWarning(...)
Log in warning mode.
TypeEquivalentString(F f)
void destroy(void *src) override
Free all resources of a storage.
#define _QI_BOUNCE_TYPE_METHODS(Bounce)
Implement all methods of Type as bouncers to Bouncer.
_QI_BOUNCE_TYPE_METHODS(Impl)
void set(void **storage, const std::string &value)
Set the value of the string.
auto callWithInstance(Func &&f, Args &&...args) -> decltype(std::forward< Func >(f)(std::forward< Args >(args)...))
std::pair< char *, size_t > RawString
T src(const std::atomic< T > &x)
std::string getString(void *storage)
Get a copy of the string value.
static void * ptrFromStorage(void **storage)
void * clone(void *src) override
Allocate a storage and copy the value given as an argument.
char * strdup(const char *src)
Implement POSIX compliant strdup.
void * clone(void *src) override
Allocate a storage and copy the value given as an argument.
void set(void **storage, const char *ptr, size_t sz) override
Set the value of the string.