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 # ifndef ACE_LACKS_MEMBER_TEMPLATES
00046
00047 template <typename iter>
00048 inline static void copy_range(
00049 object_type ** begin, object_type ** end, iter dst)
00050 {
00051 std::transform(begin, end, dst, &derived::duplicate);
00052 }
00053 #else
00054 inline static void copy_range(
00055 object_type ** begin, object_type ** end, object_type ** dst)
00056 {
00057 std::transform(begin, end, dst, &derived::duplicate);
00058 }
00059 # endif
00060
00061 inline static void release_range(
00062 object_type ** begin, object_type ** end)
00063 {
00064 std::for_each(begin, end, &derived::release);
00065 }
00066
00067 inline static object_type const * initialize_if_zero(object_type * & element)
00068 {
00069 if (element == 0)
00070 {
00071 element = derived::nil();
00072 }
00073 return element;
00074 }
00075 };
00076
00077 template<typename object_t, typename object_t_var, bool dummy>
00078 struct object_reference_traits
00079 : public object_reference_traits_base<object_t, object_t_var>
00080 , public object_reference_traits_decorator<object_t, object_t_var, object_reference_traits<object_t,object_t_var,dummy> >
00081 {
00082 typedef object_t object_type;
00083 typedef object_type * value_type;
00084 typedef object_type const * const_value_type;
00085 typedef object_t_var object_type_var;
00086 };
00087
00088 }
00089 }
00090
00091 TAO_END_VERSIONED_NAMESPACE_DECL
00092
00093 #endif // guard_object_reference_traits_hpp