]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/config/locale/generic/collate_members.cc
Licensing changes to GPLv3 resp. GPLv3 with GCC Runtime Exception.
[thirdparty/gcc.git] / libstdc++-v3 / config / locale / generic / collate_members.cc
CommitLineData
ea0c0b6e
BK
1// std::collate implementation details, generic version -*- C++ -*-
2
748086b7 3// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009
538075fe 4// Free Software Foundation, Inc.
ea0c0b6e
BK
5//
6// This file is part of the GNU ISO C++ Library. This library is free
7// software; you can redistribute it and/or modify it under the
8// terms of the GNU General Public License as published by the
748086b7 9// Free Software Foundation; either version 3, or (at your option)
ea0c0b6e
BK
10// any later version.
11
12// This library is distributed in the hope that it will be useful,
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15// GNU General Public License for more details.
16
748086b7
JJ
17// Under Section 7 of GPL version 3, you are granted additional
18// permissions described in the GCC Runtime Library Exception, version
19// 3.1, as published by the Free Software Foundation.
ea0c0b6e 20
748086b7
JJ
21// You should have received a copy of the GNU General Public License and
22// a copy of the GCC Runtime Library Exception along with this program;
23// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
24// <http://www.gnu.org/licenses/>.
ea0c0b6e
BK
25
26//
27// ISO C++ 14882: 22.2.4.1.2 collate virtual functions
28//
29
30// Written by Benjamin Kosnik <bkoz@redhat.com>
31
32#include <locale>
538075fe 33#include <cstring>
ea0c0b6e 34
3cbc7af0
BK
35_GLIBCXX_BEGIN_NAMESPACE(std)
36
ea0c0b6e
BK
37 // These are basically extensions to char_traits, and perhaps should
38 // be put there instead of here.
39 template<>
40 int
d3a193e3 41 collate<char>::_M_compare(const char* __one, const char* __two) const
a10e3b42
UD
42 {
43 int __cmp = strcoll(__one, __two);
44 return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
45 }
ea0c0b6e
BK
46
47 template<>
48 size_t
d3a193e3
BK
49 collate<char>::_M_transform(char* __to, const char* __from,
50 size_t __n) const
ea0c0b6e
BK
51 { return strxfrm(__to, __from, __n); }
52
3d7c150e 53#ifdef _GLIBCXX_USE_WCHAR_T
ea0c0b6e
BK
54 template<>
55 int
d3a193e3
BK
56 collate<wchar_t>::_M_compare(const wchar_t* __one,
57 const wchar_t* __two) const
a10e3b42
UD
58 {
59 int __cmp = wcscoll(__one, __two);
60 return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
61 }
ea0c0b6e
BK
62
63 template<>
64 size_t
d3a193e3
BK
65 collate<wchar_t>::_M_transform(wchar_t* __to, const wchar_t* __from,
66 size_t __n) const
ea0c0b6e
BK
67 { return wcsxfrm(__to, __from, __n); }
68#endif
3cbc7af0
BK
69
70_GLIBCXX_END_NAMESPACE