Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #ifndef _GLIBCXX_CXX_LOCALE_H
00038 #define _GLIBCXX_CXX_LOCALE_H 1
00039
00040 #pragma GCC system_header
00041
00042 #include <clocale>
00043
00044 #define _GLIBCXX_C_LOCALE_GNU 1
00045
00046 #define _GLIBCXX_NUM_CATEGORIES 6
00047
00048 #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
00049 _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
00050
00051 extern "C" __typeof(uselocale) __uselocale;
00052
00053 _GLIBCXX_END_NAMESPACE
00054 #endif
00055
00056 _GLIBCXX_BEGIN_NAMESPACE(std)
00057
00058 typedef __locale_t __c_locale;
00059
00060
00061
00062
00063
00064 inline int
00065 __convert_from_v(const __c_locale& __cloc __attribute__ ((__unused__)),
00066 char* __out,
00067 const int __size __attribute__ ((__unused__)),
00068 const char* __fmt, ...)
00069 {
00070 #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
00071 __c_locale __old = __gnu_cxx::__uselocale(__cloc);
00072 #else
00073 char* __old = std::setlocale(LC_NUMERIC, 0);
00074 char* __sav = 0;
00075 if (__builtin_strcmp(__old, "C"))
00076 {
00077 const size_t __len = __builtin_strlen(__old) + 1;
00078 __sav = new char[__len];
00079 __builtin_memcpy(__sav, __old, __len);
00080 std::setlocale(LC_NUMERIC, "C");
00081 }
00082 #endif
00083
00084 __builtin_va_list __args;
00085 __builtin_va_start(__args, __fmt);
00086
00087 #ifdef _GLIBCXX_USE_C99
00088 const int __ret = __builtin_vsnprintf(__out, __size, __fmt, __args);
00089 #else
00090 const int __ret = __builtin_vsprintf(__out, __fmt, __args);
00091 #endif
00092
00093 __builtin_va_end(__args);
00094
00095 #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
00096 __gnu_cxx::__uselocale(__old);
00097 #else
00098 if (__sav)
00099 {
00100 std::setlocale(LC_NUMERIC, __sav);
00101 delete [] __sav;
00102 }
00103 #endif
00104 return __ret;
00105 }
00106
00107 _GLIBCXX_END_NAMESPACE
00108
00109 #endif