it_bus/reflect/type_list_impl_t.h

00001 #ifndef _IT_REFLECT_TYPE_LIST_IMPL_T_H_
00002 #define _IT_REFLECT_TYPE_LIST_IMPL_T_H_
00003 
00004 // @Copyright 2004 IONA Technologies, Plc. All Rights Reserved.
00005 //
00006 
00007 #include <it_bus/reflect/reflection_impl.h>
00008 #include <it_bus/reflect/element_list_impl_base.h>
00009 #include <it_bus/reflect/bounds_exception.h>
00010 #include <it_bus/reflect/traits.h>
00011 
00012 namespace IT_Reflect
00013 {
00015     template <class ListT, class T>
00016     class TypeListImplT :
00017         public virtual ReflectionImpl,
00018         public virtual ElementListImplBase
00019     {
00020       public:
00024         TypeListImplT(
00025             const ListT* data
00026         ) throw(());
00027 
00028         virtual IT_Bus::AnyType*
00029         clone() const throw((ReflectException));
00030 
00031       protected:
00032         virtual IT_Bus::MinMaxList&
00033         get_list() const throw(());
00034 
00035         virtual Reflection*
00036         get_reflection(
00037             size_t index
00038         ) const throw((ReflectException));
00039 
00040         virtual IT_Bus::AnyType&
00041         get_data() const throw(());
00042 
00043       private:
00044         ListT* m_data;
00045     };
00046 
00047     template <class ListT, class T>
00048     TypeListImplT<ListT, T>::TypeListImplT(
00049         const ListT* data
00050     ) throw(()) 
00051         :
00052         m_data(IT_CONST_CAST(ListT*, data))
00053     {
00054         // Complete.
00055     }
00056 
00057     template <class ListT, class T>
00058     IT_Bus::MinMaxList&
00059     TypeListImplT<ListT, T>::get_list(
00060     ) const throw(())
00061     {
00062         return *m_data;
00063     }
00064 
00065     template <class ListT, class T>
00066     Reflection*
00067     TypeListImplT<ListT, T>::get_reflection(
00068         size_t index
00069     ) const throw((ReflectException))
00070     {
00071         return Traits<T>::get_reflection((*m_data)[index]);
00072     }
00073 
00074     template <class ListT, class T>
00075     IT_Bus::AnyType&
00076     TypeListImplT<ListT, T>::get_data() const throw(())
00077     {
00078         return *m_data;
00079     }
00080 
00081     template <class ListT, class T>
00082     IT_Bus::AnyType*
00083     TypeListImplT<ListT, T>::clone(
00084     ) const throw((ReflectException))
00085     {
00086         return new ListT(*m_data);
00087     }
00088     
00089 }
00090 
00091 #endif  

Generated on Tue Mar 20 15:27:43 2007 for Artix by  doxygen 1.5.1-p1