Object_Reference_Traits_T.h

Go to the documentation of this file.
00001 #ifndef guard_object_reference_traits_hpp
00002 #define guard_object_reference_traits_hpp
00003 /**
00004  * @file
00005  *
00006  * @brief Implement the element manipulation traits for object
00007  *        reference types.
00008  *
00009  * Object_Reference_Traits_T.h,v 1.2 2006/04/19 08:21:28 jwillemsen Exp
00010  *
00011  * @author Carlos O'Ryan
00012  */
00013 #include "Object_Reference_Traits_Base_T.h"
00014 
00015 #include <algorithm>
00016 #include <functional>
00017 
00018 TAO_BEGIN_VERSIONED_NAMESPACE_DECL
00019 
00020 namespace TAO
00021 {
00022 namespace details
00023 {
00024 
00025 template<class object_t, class object_t_var, class derived>
00026 struct object_reference_traits_decorator
00027 {
00028   typedef object_t object_type;
00029   typedef object_type * value_type;
00030   typedef object_type const * const_value_type;
00031   typedef object_t_var object_type_var;
00032 
00033   inline static void zero_range(
00034       object_type ** begin, object_type ** end)
00035   {
00036     std::fill(begin, end, derived::nil());
00037   }
00038 
00039   inline static void initialize_range(
00040       object_type ** begin, object_type ** end)
00041   {
00042     std::generate(begin, end, &derived::default_initializer);
00043   }
00044 
00045   inline static void copy_range(
00046       object_type ** begin, object_type ** end, object_type ** dst)
00047   {
00048     std::transform(begin, end, dst, &derived::duplicate);
00049   }
00050 
00051   inline static void release_range(
00052       object_type ** begin, object_type ** end)
00053   {
00054     std::for_each(begin, end, &derived::release);
00055   }
00056 
00057   inline static object_type const * initialize_if_zero(object_type * & element)
00058   {
00059     if (element == 0)
00060     {
00061       element = derived::nil();
00062     }
00063     return element;
00064   }
00065 };
00066 
00067 template<typename object_t, typename object_t_var, bool dummy>
00068 struct object_reference_traits
00069   : public object_reference_traits_base<object_t, object_t_var>
00070   , public object_reference_traits_decorator<object_t, object_t_var, object_reference_traits<object_t,object_t_var,dummy> >
00071 {
00072   typedef object_t object_type;
00073   typedef object_type * value_type;
00074   typedef object_type const * const_value_type;
00075   typedef object_t_var object_type_var;
00076 };
00077 
00078 } // namespace details
00079 } // namespace CORBA
00080 
00081 TAO_END_VERSIONED_NAMESPACE_DECL
00082 
00083 #endif // guard_object_reference_traits_hpp

Generated on Thu Nov 9 11:54:16 2006 for TAO by doxygen 1.3.6