it_bus/reflect/element_list_impl_t.h

00001 #ifndef _IT_REFLECT_ELEMENT_LIST_IMPL_T_H_
00002 #define _IT_REFLECT_ELEMENT_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 {
00017     template <class ListT, class T>
00018     class ElementListImplT :
00019         public virtual ReflectionImpl,
00020         public virtual ElementListImplBase
00021     {
00022       public:
00026         ElementListImplT(
00027             const ListT* data
00028         ) throw(());
00029 
00034         virtual IT_Bus::AnyType*
00035         clone() const throw((ReflectException));
00036 
00037       protected:
00042         virtual IT_Bus::MinMaxList&
00043         get_list() const throw(());
00044 
00050         virtual Reflection*
00051         get_reflection(
00052             size_t index
00053         ) const throw((ReflectException));
00054 
00059         virtual IT_Bus::AnyType&
00060         get_data() const throw(());
00061 
00062       private:
00063         ListT* m_data;
00064     };
00065 
00066     template <class ListT, class T>
00067     ElementListImplT<ListT, T>::ElementListImplT(
00068         const ListT* data
00069     ) throw(()) 
00070         :
00071         m_data(IT_CONST_CAST(ListT*, data))
00072     {
00073         // Complete.
00074     }
00075 
00076     template <class ListT, class T>
00077     IT_Bus::MinMaxList&
00078     ElementListImplT<ListT, T>::get_list(
00079     ) const throw(())
00080     {
00081         return *m_data;
00082     }
00083 
00084     template <class ListT, class T>
00085     Reflection*
00086     ElementListImplT<ListT, T>::get_reflection(
00087         size_t index
00088     ) const throw((ReflectException))
00089     {
00090         return Traits<T>::get_reflection((*m_data)[index]);
00091     }
00092 
00093     template <class ListT, class T>
00094     IT_Bus::AnyType&
00095     ElementListImplT<ListT, T>::get_data() const throw(())
00096     {
00097         return *m_data;
00098     }
00099 
00100     template <class ListT, class T>
00101     IT_Bus::AnyType*
00102     ElementListImplT<ListT, T>::clone(
00103     ) const throw((ReflectException))
00104     {
00105         return new ListT(*m_data);
00106     }
00107     
00108 }
00109 
00110 #endif  

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