7 #ifndef _QITYPE_DETAILS_TYPELIST_HXX_
8 #define _QITYPE_DETAILS_TYPELIST_HXX_
10 #include <boost/static_assert.hpp>
21 template<
typename T,
typename H = ListTypeInterface>
27 virtual size_t size(
void* storage);
31 virtual void pushBack(
void** storage,
void* valueStorage);
47 virtual void next(
void** storage)
52 virtual bool equals(
void* s1,
void* s2)
69 template<
typename T,
typename H>
72 _elementType = typeOf<typename T::value_type>();
81 template<
typename T,
typename H>
84 T* ptr = (T*)ptrFromStorage(&storage);
88 template<
typename T,
typename H>
91 T* ptr = (T*)ptrFromStorage(&storage);
96 template<
typename T,
typename E>
99 container.push_back(*element);
101 template<
typename CE,
typename E>
104 container.insert(*element);
107 template<
typename T,
typename H>
110 T* ptr = (T*) ptrFromStorage(storage);
111 detail::pushBack(*ptr, (
typename T::value_type*)_elementType->ptrFromStorage(&valueStorage));
114 template<
typename T,
typename H>
117 T* ptr = (T*) ptrFromStorage(&storage);
124 BOOST_STATIC_ASSERT_MSG((!boost::is_same<T,bool>::value),
"std::vector<bool> is not supported by AnyValue.");
145 typename T::VectorType& v = ptr->args();
149 virtual size_t size(
void* storage) {
158 virtual void pushBack(
void** storage,
void* valueStorage) {
170 #endif // _QITYPE_DETAILS_TYPELIST_HXX_
virtual void * ptrFromStorage(void **)=0
VarArgsTypeInterfaceImpl()
ListTypeInterfaceImpl< typename T::VectorType, VarArgsTypeInterface > BaseClass
static AnyIterator make(const T &val)
virtual size_t size(void *storage)
Return the number of elements in the list.
_QI_BOUNCE_TYPE_METHODS(MethodsImpl)
virtual AnyIterator end(void *storage)
void pushBack(T &container, E *element)
DefaultTypeImplMethods< T, TypeByPointerPOD< T > > MethodsImpl
DefaultTypeImplMethods< T, TypeByPointerPOD< T > > MethodsImpl
_QI_BOUNCE_TYPE_METHODS(TypeImpl)
virtual void pushBack(void **storage, void *valueStorage)
TypeInterface * _elementType
virtual AnyIterator begin(void *storage)
virtual AnyReference dereference(void *storage)
#define QI_THREADSAFE_NEW(...)
Safe static initialization of variables.
_QI_BOUNCE_TYPE_METHODS(MethodsImpl)
virtual bool equals(void *s1, void *s2)
Check for iterator equality.
virtual void pushBack(void **storage, void *valueStorage)
Append an element to the end of the list.
void * adaptStorage(void **storage)
virtual TypeInterface * elementType()
virtual void next(void **storage)
Increment the iterator.
virtual AnyIterator end(void *storage)
DefaultTypeImplMethods< Storage, TypeByPointerPOD< T > > TypeImpl
static AnyReference from(const T &ref)
virtual AnyIterator begin(void *storage)
Return an iterator pointing to the first element of the list.
virtual void * initializeStorage(void *ptr=0)=0
virtual size_t size(void *storage)