it_bus/reflect/nillable_value_impl_t.h

00001 #ifndef _IT_REFLECT_NILLABLE_VALUE_IMPL_T_H_
00002 #define _IT_REFLECT_NILLABLE_VALUE_IMPL_T_H_
00003 
00004 // @Copyright 2004 IONA Technologies, Plc. All Rights Reserved.
00005 //
00006 
00007 #include <it_bus/reflect/nillable.h>
00008 #include <it_bus/reflect/reflection_impl_t.h>
00009 
00010 namespace IT_Reflect
00011 {
00015     template <class NillableT, class T>
00016     class NillableValueImplT :
00017         public virtual ReflectionImplT<NillableT>,
00018         public virtual Nillable
00019     {
00020       public:
00024         NillableValueImplT(
00025             const NillableT* data
00026         ) throw(());
00027 
00031         virtual ~NillableValueImplT() throw(());
00032 
00033         virtual IT_Bus::Boolean
00034         get_is_nil() const throw(());
00035 
00036         virtual void
00037         set_is_nil() throw(());
00038         
00039         virtual const Reflection*
00040         get_value() const throw((ReflectException));
00041 
00042         virtual Reflection*
00043         use_value() throw((ReflectException));
00044         
00045       private:
00046         // private and unimplemented to prevent copying
00047         NillableValueImplT(const NillableValueImplT&);
00048         void operator=(const NillableValueImplT&);
00049     };
00050 
00051     template <class NillableT, class T>
00052     NillableValueImplT<NillableT, T>::NillableValueImplT(
00053         const NillableT* data
00054     ) throw(())
00055         :
00056         ReflectionImplT<NillableT>(data)
00057     {
00058         // Complete.
00059     }
00060 
00061     template <class NillableT, class T>
00062     NillableValueImplT<NillableT, T>::~NillableValueImplT(
00063     ) throw(())
00064     {
00065         // Complete.
00066     }
00067 
00068     template <class NillableT, class T>
00069     IT_Bus::Boolean
00070     NillableValueImplT<NillableT, T>::get_is_nil(
00071     ) const throw(())
00072     {
00073         return this->m_data->is_nil();
00074     }
00075 
00076     template <class NillableT, class T>
00077     void
00078     NillableValueImplT<NillableT, T>::set_is_nil(
00079     ) throw(())
00080     {
00081         this->m_data->set_nil();
00082     }
00083 
00084     template <class NillableT, class T>
00085     const Reflection*
00086     NillableValueImplT<NillableT, T>::get_value(
00087     ) const throw((ReflectException))
00088     {
00089         return get_is_nil() ?
00090             0 : Traits<T>::get_reflection(this->m_data->get());
00091     }
00092 
00093     template <class NillableT, class T>
00094     Reflection*
00095     NillableValueImplT<NillableT, T>::use_value(
00096     ) throw((ReflectException))
00097     {
00098         this->m_data->m_is_nil = false;
00099         return Traits<T>::get_reflection(this->m_data->get());
00100     }
00101 }
00102 
00103 
00104 #endif  

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