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 namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
00050 {
00051 _GLIBCXX_BEGIN_NAMESPACE_VERSION
00052
00053 extern "C" __typeof(uselocale) __uselocale;
00054
00055 _GLIBCXX_END_NAMESPACE_VERSION
00056 }
00057 #endif
00058
00059 namespace std _GLIBCXX_VISIBILITY(default)
00060 {
00061 _GLIBCXX_BEGIN_NAMESPACE_VERSION
00062
00063 typedef __locale_t __c_locale;
00064
00065
00066
00067
00068
00069 inline int
00070 __convert_from_v(const __c_locale& __cloc __attribute__ ((__unused__)),
00071 char* __out,
00072 const int __size __attribute__ ((__unused__)),
00073 const char* __fmt, ...)
00074 {
00075 #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
00076 __c_locale __old = __gnu_cxx::__uselocale(__cloc);
00077 #else
00078 char* __old = std::setlocale(LC_NUMERIC, 0);
00079 char* __sav = 0;
00080 if (__builtin_strcmp(__old, "C"))
00081 {
00082 const size_t __len = __builtin_strlen(__old) + 1;
00083 __sav = new char[__len];
00084 __builtin_memcpy(__sav, __old, __len);
00085 std::setlocale(LC_NUMERIC, "C");
00086 }
00087 #endif
00088
00089 __builtin_va_list __args;
00090 __builtin_va_start(__args, __fmt);
00091
00092 #ifdef _GLIBCXX_USE_C99
00093 const int __ret = __builtin_vsnprintf(__out, __size, __fmt, __args);
00094 #else
00095 const int __ret = __builtin_vsprintf(__out, __fmt, __args);
00096 #endif
00097
00098 __builtin_va_end(__args);
00099
00100 #if __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2)
00101 __gnu_cxx::__uselocale(__old);
00102 #else
00103 if (__sav)
00104 {
00105 std::setlocale(LC_NUMERIC, __sav);
00106 delete [] __sav;
00107 }
00108 #endif
00109 return __ret;
00110 }
00111
00112 _GLIBCXX_END_NAMESPACE_VERSION
00113 }
00114
00115 #endif