20 #ifndef OBJECT_VECTOR_H
21 #define OBJECT_VECTOR_H
25 #include "attribute.h"
26 #include "object-ptr-container.h"
30 typedef ObjectPtrContainerValue ObjectVectorValue;
32 template <
typename T,
typename U>
33 Ptr<const AttributeAccessor>
34 MakeObjectVectorAccessor (U T::*memberContainer);
37 Ptr<const AttributeChecker> MakeObjectVectorChecker (
void);
39 template <
typename T,
typename U,
typename INDEX>
40 Ptr<const AttributeAccessor>
41 MakeObjectVectorAccessor (Ptr<U> (T::*
get)(INDEX)
const,
42 INDEX (T::*getN)(
void)
const);
44 template <
typename T,
typename U,
typename INDEX>
45 Ptr<const AttributeAccessor>
46 MakeObjectVectorAccessor (INDEX (T::*getN)(
void)
const,
47 Ptr<U> (T::*
get)(INDEX)
const);
49 template <
typename T,
typename U>
50 Ptr<const AttributeAccessor>
51 MakeObjectVectorAccessor (U T::*memberVector)
53 struct MemberStdContainer :
public ObjectPtrContainerAccessor
55 virtual bool DoGetN (
const ObjectBase *
object, uint32_t *n)
const {
56 const T *obj =
dynamic_cast<const T *
> (object);
61 *n = (obj->*m_memberVector).size ();
64 virtual Ptr<Object> DoGet (
const ObjectBase *
object, uint32_t i, uint32_t *index)
const {
65 const T *obj =
static_cast<const T *
> (object);
66 typename U::const_iterator begin = (obj->*m_memberVector).begin ();
67 typename U::const_iterator end = (obj->*m_memberVector).end ();
69 for (
typename U::const_iterator j = begin; j != end; j++, k++)
83 } *spec =
new MemberStdContainer ();
84 spec->m_memberVector = memberVector;
85 return Ptr<const AttributeAccessor> (spec,
false);
89 Ptr<const AttributeChecker> MakeObjectVectorChecker (
void)
91 return MakeObjectPtrContainerChecker<T> ();
94 template <
typename T,
typename U,
typename INDEX>
95 Ptr<const AttributeAccessor>
96 MakeObjectVectorAccessor (Ptr<U> (T::*
get)(INDEX)
const,
97 INDEX (T::*getN)(
void)
const)
99 return MakeObjectPtrContainerAccessor<T,U,INDEX>(
get, getN);
102 template <
typename T,
typename U,
typename INDEX>
103 Ptr<const AttributeAccessor>
104 MakeObjectVectorAccessor (INDEX (T::*getN)(
void)
const,
105 Ptr<U> (T::*
get)(INDEX)
const)
107 return MakeObjectPtrContainerAccessor<T,U,INDEX>(
get, getN);
#define NS_ASSERT(condition)