source: svn/trunk/newcon3bcm2_21bu/toolchain/include/c++/3.4.2/mips-linux-uclibc/bits/c++locale.h

Last change on this file was 2, checked in by jglee, 11 years ago

first commit

  • Property svn:executable set to *
File size: 3.5 KB
Line 
1// Wrapper for underlying C-language localization -*- C++ -*-
2
3// Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
4//
5// This file is part of the GNU ISO C++ Library.  This library is free
6// software; you can redistribute it and/or modify it under the
7// terms of the GNU General Public License as published by the
8// Free Software Foundation; either version 2, or (at your option)
9// any later version.
10
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14// GNU General Public License for more details.
15
16// You should have received a copy of the GNU General Public License along
17// with this library; see the file COPYING.  If not, write to the Free
18// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
19// USA.
20
21// As a special exception, you may use this file as part of a free software
22// library without restriction.  Specifically, if other files instantiate
23// templates or use macros or inline functions from this file, or you compile
24// this file and link it with other files to produce an executable, this
25// file does not by itself cause the resulting executable to be covered by
26// the GNU General Public License.  This exception does not however
27// invalidate any other reasons why the executable file might be covered by
28// the GNU General Public License.
29
30//
31// ISO C++ 14882: 22.8  Standard locale categories.
32//
33
34// Written by Benjamin Kosnik <bkoz@redhat.com>
35
36#ifndef _C_LOCALE_H
37#define _C_LOCALE_H 1
38
39#pragma GCC system_header
40
41#include <cstring>              // get std::strlen
42#include <cstdio>               // get std::snprintf or std::sprintf
43#include <clocale>
44#include <langinfo.h>           // For codecvt
45#ifdef __UCLIBC_MJN3_ONLY__
46#warning fix this
47#endif
48#ifdef __UCLIBC_HAS_LOCALE__
49#include <iconv.h>              // For codecvt using iconv, iconv_t
50#endif
51#ifdef __UCLIBC_HAS_GETTEXT_AWARENESS__
52#include <libintl.h>            // For messages
53#endif
54
55#ifdef __UCLIBC_MJN3_ONLY__
56#warning what is _GLIBCXX_C_LOCALE_GNU for
57#endif
58#define _GLIBCXX_C_LOCALE_GNU 1
59
60#ifdef __UCLIBC_MJN3_ONLY__
61#warning fix categories
62#endif
63// #define _GLIBCXX_NUM_CATEGORIES 6
64#define _GLIBCXX_NUM_CATEGORIES 0
65 
66#ifdef __UCLIBC_HAS_XLOCALE__
67namespace __gnu_cxx
68{
69  extern "C" __typeof(uselocale) __uselocale;
70}
71#endif
72
73namespace std
74{
75#ifdef __UCLIBC_HAS_XLOCALE__
76  typedef __locale_t            __c_locale;
77#else
78  typedef int*                  __c_locale;
79#endif
80
81  // Convert numeric value of type _Tv to string and return length of
82  // string.  If snprintf is available use it, otherwise fall back to
83  // the unsafe sprintf which, in general, can be dangerous and should
84  // be avoided.
85  template<typename _Tv>
86    int
87    __convert_from_v(char* __out, const int __size, const char* __fmt,
88#ifdef __UCLIBC_HAS_XLOCALE__
89                     _Tv __v, const __c_locale& __cloc, int __prec)
90    {
91      __c_locale __old = __gnu_cxx::__uselocale(__cloc);
92#else
93                     _Tv __v, const __c_locale&, int __prec)
94    {
95# ifdef __UCLIBC_HAS_LOCALE__
96      char* __old = std::setlocale(LC_ALL, NULL);
97      char* __sav = new char[std::strlen(__old) + 1];
98      std::strcpy(__sav, __old);
99      std::setlocale(LC_ALL, "C");
100# endif
101#endif
102
103      const int __ret = std::snprintf(__out, __size, __fmt, __prec, __v);
104
105#ifdef __UCLIBC_HAS_XLOCALE__
106      __gnu_cxx::__uselocale(__old);
107#elif defined __UCLIBC_HAS_LOCALE__
108      std::setlocale(LC_ALL, __sav);
109      delete [] __sav;
110#endif
111      return __ret;
112    }
113}
114
115#endif
Note: See TracBrowser for help on using the repository browser.