/////////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2008-2012 Artyom Beilis (Tonkikh) // // See accompanying file COPYING.TXT file for licensing details. // /////////////////////////////////////////////////////////////////////////////// #ifndef CPPCMS_IMPL_FORMAT_NUMBER_H #define CPPCMS_IMPL_FORMAT_NUMBER_H #include #include #include #include #include namespace cppcms { namespace impl { template::is_integer> struct format_traits; template struct format_traits { static void format(Value v,char *output,size_t n) { char buf[std::numeric_limits::digits10 + 10]; char *begin = buf; if(v < 0) { *begin ++ = '-'; } if(v == 0) { *begin ++ ='0'; *begin = 0; } else { char *p=begin; while(v != 0) { int digit = v % 10; v/=10; if(digit < 0) *p++='0' - digit; else *p++='0' + digit; } *p-- = 0; while(begin < p) { std::swap(*begin,*p); begin++; p--; } } strncpy(output,buf,n-1); output[n-1] = 0; } }; template struct format_traits { static void format(Value v,char *output,size_t n) { std::ostringstream ss; ss.imbue(std::locale::classic()); ss<::digits10+1)< void format_number(Value v,char *begin,size_t n) { format_traits::format(v,begin,n); } } } #endif