00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00023
00033
00034
00035 #ifndef _XST_MEMBER_NOARG_VOID_H_INCLUDED_
00036 #define _XST_MEMBER_NOARG_VOID_H_INCLUDED_
00037
00038 namespace cttl_impl {
00039
00053 template< typename ObjectT, typename MemberActionT >
00054 class xst_member_action< ObjectT, MemberActionT, void, void >
00055
00056 #ifdef CTTL_TRACE_DEPOSITS
00057 : public xst_traced_action_base
00058 #endif
00059
00060 {
00062 xst_storage_adaptor< ObjectT > m_object;
00063
00065 MemberActionT m_member_action;
00066
00067 public:
00069 typedef xst_member_action< ObjectT, MemberActionT, void, void > action_T;
00070
00072 typedef int result_T;
00073
00075 typedef int value_type;
00076
00078 xst_member_action(
00079 #ifdef CTTL_TRACE_DEPOSITS
00080 int line_,
00081 char const* action_name_,
00082 #endif
00083 ObjectT object_ref_,
00084 MemberActionT member_action_
00085 )
00086 :
00087 #ifdef CTTL_TRACE_DEPOSITS
00088 xst_traced_action_base( line_, action_name_ ),
00089 #endif
00090 m_object( object_ref_ ),
00091 m_member_action( member_action_ )
00092 {
00093 }
00094
00096 result_T operator() ( bool ) const
00097 {
00098 return operator*();
00099 }
00100
00102 result_T operator* () const
00103 {
00104 #ifdef CTTL_TRACE_DEPOSITS
00105 trace_prolog();
00106 m_member_action( &m_object.value() );
00107 result_T result = result_T( 1 );
00108 trace_epilog( result );
00109 return result;
00110 #else
00111 m_member_action( &m_object.value() );
00112 return result_T( 1 );
00113 #endif // CTTL_TRACE_DEPOSITS
00114 }
00115
00116 };
00117
00118 }
00119
00120
00121 #endif //_XST_MEMBER_NOARG_VOID_H_INCLUDED_