7 #ifndef _QITYPE_DETAIL_TYPELIST_HXX_
8 #define _QITYPE_DETAIL_TYPELIST_HXX_
19 template<
typename T,
typename H = ListTypeInterface>
25 size_t size(
void* storage)
override;
29 void pushBack(
void** storage,
void* valueStorage)
override;
45 void next(
void** storage)
override
50 bool equals(
void* s1,
void* s2)
override
67 template<
typename T,
typename H>
70 _elementType = typeOf<typename T::value_type>();
79 template<
typename T,
typename H>
82 T* ptr = (T*)ptrFromStorage(&storage);
86 template<
typename T,
typename H>
89 T* ptr = (T*)ptrFromStorage(&storage);
94 template<
typename T,
typename E>
97 container.push_back(*element);
99 template<
typename CE,
typename E>
102 container.insert(*element);
105 template<
typename T,
typename H>
108 T* ptr = (T*) ptrFromStorage(storage);
109 detail::pushBack(*ptr, (
typename T::value_type*)_elementType->ptrFromStorage(&valueStorage));
112 template<
typename T,
typename H>
115 T* ptr = (T*) ptrFromStorage(&storage);
122 static_assert(!boost::is_same<T,bool>::value,
"std::vector<bool> is not supported by AnyValue.");
143 typename T::VectorType& v = ptr->args();
147 size_t size(
void* storage)
override {
156 void pushBack(
void** storage,
void* valueStorage)
override {
168 #endif // _QITYPE_DETAIL_TYPELIST_HXX_
virtual void * ptrFromStorage(void **)=0
VarArgsTypeInterfaceImpl()
static AnyIterator make(const T &val)
_QI_BOUNCE_TYPE_METHODS(MethodsImpl)
void pushBack(T &container, E *element)
_QI_BOUNCE_TYPE_METHODS(TypeImpl)
AnyIterator begin(void *storage) override
TypeInterface * _elementType
#define QI_THREADSAFE_NEW(...)
Safe static initialization of variables.
virtual void * initializeStorage(void *ptr=nullptr)=0
_QI_BOUNCE_TYPE_METHODS(MethodsImpl)
AnyIterator end(void *storage) override
void next(void **storage) override
Increment the iterator.
void * adaptStorage(void **storage)
bool equals(void *s1, void *s2) override
Check for iterator equality.
AnyIterator end(void *storage) override
AnyReference dereference(void *storage) override
TypeInterface * elementType() override
size_t size(void *storage) override
Return the number of elements in the list.
void pushBack(void **storage, void *valueStorage) override
void pushBack(void **storage, void *valueStorage) override
Append an element to the end of the list.
DefaultTypeImplMethods< T, TypeByPointerPOD< T >> MethodsImpl
size_t size(void *storage) override
static AnyReference from(const T &ref)
AnyIterator begin(void *storage) override
Return an iterator pointing to the first element of the list.