00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00023
00034
00035
00036 #ifndef _XST_LITERAL_TRANSLATOR_H_INCLUDED_
00037 #define _XST_LITERAL_TRANSLATOR_H_INCLUDED_
00038
00039 #ifdef NDEBUG
00040
00041 #define CTTL_LAMBDA_ASSERT( xexpr ) +const_scalar( 1 )
00042 #define CTTL_LAMBDA_TRACE( xexpr ) +const_scalar( 1 )
00043 #else
00044
00045 #define CTTL_LAMBDA_ASSERT( xexpr ) \
00046 ( \
00047 ( xexpr ) \
00048 || \
00049 --( \
00050 scalar( 0 ) \
00051 ^ \
00052 atoi \
00053 ^ \
00054 "Assertion failed: " #xexpr \
00055 " in " \
00056 __FILE__ \
00057 ":" \
00058 CTTL_QUOTED_EXPRESSION( __LINE__ ) \
00059 ) \
00060 )
00061
00063 #define CTTL_LAMBDA_TRACE( xmessage ) ( ++( scalar( 0 )^atoi^( xmessage ) ) )
00064
00065 #endif // NDEBUG
00066
00067 namespace cttl_impl {
00068
00081 template< typename CharT >
00082 class xst_literal_translator
00083 {
00084 private:
00086 CharT const* m_pchar;
00087
00088 public:
00090 xst_literal_translator( CharT const* pchar_ )
00091 :
00092 m_pchar( pchar_ )
00093 {
00094 }
00095
00097 xst_literal_translator( xst_literal_translator< CharT > const& other_ )
00098 :
00099 m_pchar( other_.m_pchar )
00100 {
00101 }
00102
00107 CharT const* operator() ( bool CTTL_LAMBDA_ASSERT_ )
00108 {
00109 trace_deposit();
00110 assert( CTTL_LAMBDA_ASSERT_ );
00111 return m_pchar;
00112 }
00113
00114 private:
00116 void trace_deposit()
00117 {
00118 CTTL_TRACE_DEPOSIT_TEXT( '\"' );
00119 CTTL_TRACE_DEPOSIT_MONOSPACE_TEXT( m_pchar );
00120 CTTL_TRACE_DEPOSIT_TEXT( "\" " );
00121 }
00122
00123 };
00124
00125 }
00126
00127
00128 #endif //_XST_LITERAL_TRANSLATOR_H_INCLUDED_