Thread: [Mockpp-commits] mockpp/mockpp/compat Formatter.cpp,1.48,1.49 Formatter.h,1.38,1.39
Brought to you by:
ewald-arnold
From: Ewald A. <ewa...@us...> - 2006-03-06 19:21:47
|
Update of /cvsroot/mockpp/mockpp/mockpp/compat In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17949/mockpp/compat Modified Files: Formatter.cpp Formatter.h Log Message: fix for 64bit platforms Index: Formatter.h =================================================================== RCS file: /cvsroot/mockpp/mockpp/mockpp/compat/Formatter.h,v retrieving revision 1.38 retrieving revision 1.39 diff -u -d -r1.38 -r1.39 --- Formatter.h 29 Dec 2005 19:29:50 -0000 1.38 +++ Formatter.h 6 Mar 2006 19:21:34 -0000 1.39 @@ -44,6 +44,14 @@ */ mockpp::String number(long n, unsigned base = 10); +/** Converts a longlong value into its string representation. + * @ingroup grp_helper + * @param n the actual value + * @param base the conversion base from 2 to 36 + * @return the resulting string + */ + mockpp::String number(long long n, unsigned base = 10); + /** Converts an unsigned long value into its string representation. * @ingroup grp_helper @@ -54,6 +62,15 @@ mockpp::String number(unsigned long n, unsigned base = 10); +/** Converts an unsigned long value into its string representation. + * @ingroup grp_helper + * @param n the actual value + * @param base the conversion base from 2 to 36 + * @return the resulting string + */ + mockpp::String number(unsigned long long n, unsigned base = 10); + + /** Converts an double value into its string representation. * @ingroup grp_helper * @param n the actual value Index: Formatter.cpp =================================================================== RCS file: /cvsroot/mockpp/mockpp/mockpp/compat/Formatter.cpp,v retrieving revision 1.48 retrieving revision 1.49 diff -u -d -r1.48 -r1.49 --- Formatter.cpp 29 Dec 2005 19:29:50 -0000 1.48 +++ Formatter.cpp 6 Mar 2006 19:21:34 -0000 1.49 @@ -1,5 +1,5 @@ /** @file - @brief support formatting of strings + @brief support formatting of strings $Id$ @@ -44,18 +44,21 @@ #undef MOCKPP_ENABLE_DEFAULT_FORMATTER // one never knows.. -mockpp::String MOCKPP_EXPORT number( long n, unsigned base ) +namespace { + +template <typename T, typename uT> +mockpp::String MOCKPP_EXPORT number_stpl( T n, unsigned base ) { if ( base < 2 || base > 36 ) { - mockpp::String fmt = mockpp_i18n( MOCKPP_PCHAR( "Conversion of long to String: base %1 not allowed" ) ); - fmt << number( ( unsigned long ) base, 10 ); + mockpp::String fmt = mockpp_i18n( MOCKPP_PCHAR( "Conversion of T to String: base %1 not allowed" ) ); + fmt << number( ( uT ) base, 10 ); mockpp::assertionFailed( __LINE__, __FILE__, fmt ); } - mockpp::Char charbuf[ 65 * sizeof( mockpp::Char ) ]; + mockpp::Char charbuf[ sizeof(T) * 65 * sizeof( mockpp::Char ) ]; mockpp::Char *buf = ( mockpp::Char* ) charbuf; - mockpp::Char *p = &buf[ 64 ]; + mockpp::Char *p = &buf[ sizeof(T) * 64 ]; *p = MOCKPP_CHAR( '\0' ); int len = 0; bool neg; @@ -63,17 +66,17 @@ { neg = true; #ifdef HAVE_LIMITS - if ( n == std::numeric_limits<long>::min() ) + if ( n == std::numeric_limits<T>::min() ) #else if ( n == INT_MIN ) #endif { mockpp::String s1, s2; - s1 = number( n / ( long ) base, base ); + s1 = number( n / ( T ) base, base ); #if defined(_MSC_VER) && (_MSC_VER <= 1200) - s2 = number( ( unsigned long ) ( -( n + ( long ) base ) ) % base, base ); + s2 = number( ( unsigned T ) ( -( n + ( T ) base ) ) % base, base ); #else - s2 = number( ( -( n + ( long ) base ) ) % base, base ); + s2 = number( ( -( n + ( T ) base ) ) % base, base ); #endif return s1 + s2; } @@ -100,19 +103,36 @@ return p; } +} // anon ns + + +mockpp::String MOCKPP_EXPORT number( long n, unsigned base ) +{ + return number_stpl<long, unsigned long>(n, base); +} + -mockpp::String MOCKPP_EXPORT number( unsigned long n, unsigned base ) +mockpp::String MOCKPP_EXPORT number( long long n, unsigned base ) +{ + return number_stpl<long long, unsigned long long>(n, base); +} + + +namespace { + +template <typename T> +mockpp::String MOCKPP_EXPORT number_utpl(T n, unsigned base ) { if ( base < 2 || base > 36 ) { - mockpp::String fmt = mockpp_i18n( MOCKPP_PCHAR( "Conversion of ulong to String: base %1 not allowed" ) ); - fmt << number( ( unsigned long ) base, 10 ); + mockpp::String fmt = mockpp_i18n( MOCKPP_PCHAR( "Conversion of unsigned T to String: base %1 not allowed" ) ); + fmt << number( ( T ) base, 10 ); mockpp::assertionFailed( __LINE__, __FILE__, fmt ); } - mockpp::Char charbuf[ 65 * sizeof( mockpp::Char ) ]; + mockpp::Char charbuf[ sizeof(T) * 65 * sizeof( mockpp::Char ) ]; mockpp::Char *buf = ( mockpp::Char* ) charbuf; - mockpp::Char *p = &buf[ 64 ]; + mockpp::Char *p = &buf[ sizeof(T) * 64 ]; int len = 0; *p = MOCKPP_CHAR( '\0' ); do @@ -126,6 +146,20 @@ return p; } +} // anon ns + + +mockpp::String MOCKPP_EXPORT number( unsigned long n, unsigned base ) +{ + return number_utpl<unsigned long>(n, base); +} + + +mockpp::String MOCKPP_EXPORT number( unsigned long long n, unsigned base ) +{ + return number_utpl<unsigned long long>(n, base); +} + mockpp::String MOCKPP_EXPORT number( double n, unsigned prec ) { |