summaryrefslogtreecommitdiff
path: root/libstdc++-v3/src
diff options
context:
space:
mode:
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2007-11-16 17:45:35 +0000
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>2007-11-16 17:45:35 +0000
commitd306e628c3b12f084a5ddd20e8fe78430bbda73d (patch)
tree59ed3b5c083d11cecc6c4148fffb2bdb8d9d95c5 /libstdc++-v3/src
parent1b44c7ef97ba35d49dbe0554598bd81fcb8d8a0f (diff)
downloadgcc-d306e628c3b12f084a5ddd20e8fe78430bbda73d.tar.gz
2007-11-16 Paolo Carlini <pcarlini@suse.de>
* include/bits/locale_facets.tcc (__verify_grouping): Move... * src/locale_facets.cc: ... here. * config/abi/pre/gnu.ver: Update exports. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@130233 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/src')
-rw-r--r--libstdc++-v3/src/locale_facets.cc28
1 files changed, 26 insertions, 2 deletions
diff --git a/libstdc++-v3/src/locale_facets.cc b/libstdc++-v3/src/locale_facets.cc
index 46de583d513..8876f5874bc 100644
--- a/libstdc++-v3/src/locale_facets.cc
+++ b/libstdc++-v3/src/locale_facets.cc
@@ -1,4 +1,5 @@
-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
+// 2006, 2006
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -90,5 +91,28 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
*__fptr = '\0';
}
-_GLIBCXX_END_NAMESPACE
+ bool
+ __verify_grouping(const char* __grouping, size_t __grouping_size,
+ const string& __grouping_tmp)
+ {
+ const size_t __n = __grouping_tmp.size() - 1;
+ const size_t __min = std::min(__n, size_t(__grouping_size - 1));
+ size_t __i = __n;
+ bool __test = true;
+
+ // Parsed number groupings have to match the
+ // numpunct::grouping string exactly, starting at the
+ // right-most point of the parsed sequence of elements ...
+ for (size_t __j = 0; __j < __min && __test; --__i, ++__j)
+ __test = __grouping_tmp[__i] == __grouping[__j];
+ for (; __i && __test; --__i)
+ __test = __grouping_tmp[__i] == __grouping[__min];
+ // ... but the first parsed grouping can be <= numpunct
+ // grouping (only do the check if the numpunct char is > 0
+ // because <= 0 means any size is ok).
+ if (static_cast<signed char>(__grouping[__min]) > 0)
+ __test &= __grouping_tmp[0] <= __grouping[__min];
+ return __test;
+ }
+_GLIBCXX_END_NAMESPACE