00001 #ifndef guard_object_reference_traits_hpp
00002 #define guard_object_reference_traits_hpp
00003
00004
00005
00006
00007
00008
00009
00010
00011
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 }
00079 }
00080
00081 TAO_END_VERSIONED_NAMESPACE_DECL
00082
00083 #endif // guard_object_reference_traits_hpp