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         ) IT_THROW_DECL(());
00027 
00031         virtual ~NillableValueImplT() IT_THROW_DECL(());
00032 
00033         virtual IT_Bus::Boolean
00034         get_is_nil() const IT_THROW_DECL(());
00035 
00036         virtual void
00037         set_is_nil() IT_THROW_DECL(());
00038         
00039         virtual const Reflection*
00040         get_value() const IT_THROW_DECL((ReflectException));
00041 
00042         virtual Reflection*
00043         use_value() IT_THROW_DECL((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     ) IT_THROW_DECL(())
00055         :
00056         ReflectionImplT<NillableT>(data)
00057     {
00058         // Complete.
00059     }
00060 
00061     template <class NillableT, class T>
00062     NillableValueImplT<NillableT, T>::~NillableValueImplT(
00063     ) IT_THROW_DECL(())
00064     {
00065         // Complete.
00066     }
00067 
00068     template <class NillableT, class T>
00069     IT_Bus::Boolean
00070     NillableValueImplT<NillableT, T>::get_is_nil(
00071     ) const IT_THROW_DECL(())
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     ) IT_THROW_DECL(())
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 IT_THROW_DECL((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     ) IT_THROW_DECL((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 Thu Sep 7 11:39:01 2006 for Artix by  doxygen 1.4.7