summaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>2002-04-09 21:19:55 +0000
committerbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>2002-04-09 21:19:55 +0000
commit61e7c2dd5babcfcbfc382d55358e4657ef4bf26d (patch)
tree0b2f11adc74771559ca399c135af50f2535e53cd /libstdc++-v3
parent739c050bcaf944bcd09097f6ead48c87f326e01d (diff)
downloadgcc-61e7c2dd5babcfcbfc382d55358e4657ef4bf26d.tar.gz
2002-04-09 Benjamin Kosnik <bkoz@redhat.com>
libstdc++/1072 * include/bits/localefwd.h (locale::_Impl::_M_facets): Change from pointer to vector. Remove forward declaration of vector. Include vector. * include/bits/locale_facets.tcc: Remove vector include. (use_locale): Adjust. (has_locale): Adjust. * src/locale.cc: Adjust. * src/localename.cc: Same. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@52095 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog13
-rw-r--r--libstdc++-v3/include/bits/locale_facets.tcc11
-rw-r--r--libstdc++-v3/include/bits/localefwd.h7
-rw-r--r--libstdc++-v3/src/locale.cc4
-rw-r--r--libstdc++-v3/src/localename.cc59
5 files changed, 45 insertions, 49 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 11445dbd869..841bb477a13 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,4 +1,17 @@
2002-04-09 Benjamin Kosnik <bkoz@redhat.com>
+
+ libstdc++/1072
+ * include/bits/localefwd.h (locale::_Impl::_M_facets): Change from
+ pointer to vector.
+ Remove forward declaration of vector.
+ Include vector.
+ * include/bits/locale_facets.tcc: Remove vector include.
+ (use_locale): Adjust.
+ (has_locale): Adjust.
+ * src/locale.cc: Adjust.
+ * src/localename.cc: Same.
+
+2002-04-09 Benjamin Kosnik <bkoz@redhat.com>
Richard Henderson <rth@redhat.com>
* include/bits/sstream.tcc: Clean up bit ops.
diff --git a/libstdc++-v3/include/bits/locale_facets.tcc b/libstdc++-v3/include/bits/locale_facets.tcc
index 27fc8787148..d81406ff4b1 100644
--- a/libstdc++-v3/include/bits/locale_facets.tcc
+++ b/libstdc++-v3/include/bits/locale_facets.tcc
@@ -42,7 +42,6 @@
#include <cctype> // For isspace
#include <limits> // For numeric_limits
#include <bits/streambuf_iterator.h>
-#include <vector>
#include <typeinfo> // For bad_cast.
namespace std
@@ -72,9 +71,9 @@ namespace std
use_facet(const locale& __loc)
{
size_t __i = _Facet::id._M_index;
- locale::_Impl::__vec_facet* __facet = __loc._M_impl->_M_facets;
- const locale::facet* __fp = (*__facet)[__i];
- if (__fp == 0 || __i >= __facet->size())
+ locale::_Impl::__vec_facet& __facet = __loc._M_impl->_M_facets;
+ const locale::facet* __fp = __facet[__i];
+ if (__fp == 0 || __i >= __facet.size())
__throw_bad_cast();
return static_cast<const _Facet&>(*__fp);
}
@@ -84,8 +83,8 @@ namespace std
has_facet(const locale& __loc) throw()
{
size_t __i = _Facet::id._M_index;
- locale::_Impl::__vec_facet* __facet = __loc._M_impl->_M_facets;
- return (__i < __facet->size() && (*__facet)[__i] != 0);
+ locale::_Impl::__vec_facet& __facet = __loc._M_impl->_M_facets;
+ return (__i < __facet.size() && __facet[__i] != 0);
}
diff --git a/libstdc++-v3/include/bits/localefwd.h b/libstdc++-v3/include/bits/localefwd.h
index 172adae2e04..c80da641490 100644
--- a/libstdc++-v3/include/bits/localefwd.h
+++ b/libstdc++-v3/include/bits/localefwd.h
@@ -46,7 +46,8 @@
#include <bits/c++locale.h> // Defines __c_locale, config-specific includes
#include <climits> // For CHAR_BIT
#include <cctype> // For isspace, etc.
-#include <string> // For string
+#include <string> // For string.
+#include <vector> // For vector.
#include <bits/functexcept.h>
#include <bits/atomicity.h>
@@ -61,8 +62,6 @@ namespace std
#endif
// 22.1.1 Locale
- template<typename _Tp, typename _Alloc>
- class vector;
class locale;
// 22.1.3 Convenience interfaces
@@ -320,7 +319,7 @@ namespace std
private:
// Data Members.
_Atomic_word _M_references;
- __vec_facet* _M_facets;
+ __vec_facet _M_facets;
string _M_names[_S_num_categories];
static const locale::id* const _S_id_ctype[];
static const locale::id* const _S_id_numeric[];
diff --git a/libstdc++-v3/src/locale.cc b/libstdc++-v3/src/locale.cc
index 02177ed73c5..0b1056c045d 100644
--- a/libstdc++-v3/src/locale.cc
+++ b/libstdc++-v3/src/locale.cc
@@ -500,7 +500,7 @@ namespace std
{
size_t __i = ctype<char>::id._M_index;
const locale::_Impl* __tmp = __loc._M_impl;
- return static_cast<const ctype<char>&>(* (*(__tmp->_M_facets))[__i]);
+ return static_cast<const ctype<char>&>(*(__tmp->_M_facets[__i]));
}
#ifdef _GLIBCPP_USE_WCHAR_T
@@ -510,7 +510,7 @@ namespace std
{
size_t __i = ctype<wchar_t>::id._M_index;
const locale::_Impl* __tmp = __loc._M_impl;
- return static_cast<const ctype<wchar_t>&>(* (*(__tmp->_M_facets))[__i]);
+ return static_cast<const ctype<wchar_t>&>(*(__tmp->_M_facets[__i]));
}
#endif
diff --git a/libstdc++-v3/src/localename.cc b/libstdc++-v3/src/localename.cc
index ad816486705..53c9e8a0347 100644
--- a/libstdc++-v3/src/localename.cc
+++ b/libstdc++-v3/src/localename.cc
@@ -36,31 +36,25 @@ namespace std
locale::_Impl::
~_Impl() throw()
{
- __vec_facet::iterator it = _M_facets->begin();
- for (; it != _M_facets->end(); ++it)
- if (*it)
- (*it)->_M_remove_reference();
- delete _M_facets;
+ __vec_facet::iterator __it = _M_facets.begin();
+ __vec_facet::iterator __end = _M_facets.end();
+ for (; __it != __end; ++__it)
+ if (*__it)
+ (*__it)->_M_remove_reference();
}
// Clone existing _Impl object.
locale::_Impl::
_Impl(const _Impl& __imp, size_t __refs)
- : _M_references(__refs), _M_facets(0) // XXX
+ : _M_references(__refs) // XXX
{
- try
- { _M_facets = new __vec_facet(*(__imp._M_facets)); }
- catch(...)
- {
- delete _M_facets;
- __throw_exception_again;
- }
+ _M_facets = __imp._M_facets;
+ for (size_t __i = 0; __i < _S_num_categories; ++__i)
+ _M_names[__i] = __imp._M_names[__i];
- for (size_t i = 0; i < _S_num_categories; ++i)
- _M_names[i] = __imp._M_names[i];
-
- __vec_facet::iterator __it = _M_facets->begin();
- for (; __it != _M_facets->end(); ++__it)
+ __vec_facet::iterator __it = _M_facets.begin();
+ __vec_facet::iterator __end = _M_facets.end();
+ for (; __it != __end; ++__it)
if (*__it)
(*__it)->_M_add_reference();
}
@@ -68,7 +62,7 @@ namespace std
// Construct named _Impl, including the standard "C" locale.
locale::_Impl::
_Impl(string __str, size_t __refs)
- : _M_references(__refs), _M_facets(0)
+ : _M_references(__refs)
{
// Initialize the underlying locale model, which also checks to
// see if the given name is valid.
@@ -81,14 +75,7 @@ namespace std
if (__str != "C" && __str != "POSIX")
__cloc_c = __cloc;
- // Allocate facet container.
- try
- { _M_facets = new __vec_facet(_S_num_facets, NULL); }
- catch(...)
- {
- delete _M_facets;
- __throw_exception_again;
- }
+ _M_facets = __vec_facet(_S_num_facets, NULL);
// Name all the categories.
for (size_t i = 0; i < _S_num_categories; ++i)
@@ -162,12 +149,11 @@ namespace std
_M_replace_facet(const _Impl* __imp, const locale::id* __idp)
{
size_t __index = __idp->_M_index;
- if (__index == 0
- || __imp->_M_facets->size() <= __index
- || (*(__imp->_M_facets))[__index] == 0)
+ if (__index == 0 || __imp->_M_facets.size() <= __index
+ || __imp->_M_facets[__index] == 0)
__throw_runtime_error("no locale facet");
- _M_install_facet(__idp, (*(__imp->_M_facets))[__index]);
+ _M_install_facet(__idp, __imp->_M_facets[__index]);
}
void
@@ -180,14 +166,13 @@ namespace std
if (!__index)
__index = 1 + __exchange_and_add(&locale::id::_S_highwater, 1);
- if (__index >= _M_facets->size())
- _M_facets->resize(__index + 1, 0); // might throw
+ if (__index >= _M_facets.size())
+ _M_facets.resize(__index + 1, 0); // might throw
- facet*& __fpr = (*_M_facets)[__index];
+ facet*& __fpr = _M_facets[__index];
if (__fpr)
{
- // Replacing an existing facet.
- // Order matters, here:
+ // Replacing an existing facet. Order matters.
__fp->_M_add_reference();
__fpr->_M_remove_reference();
__fpr = __fp;
@@ -197,7 +182,7 @@ namespace std
// Installing a newly created facet into an empty
// _M_facets container, say a newly-constructed,
// swanky-fresh _Impl.
- (*_M_facets)[__index] = __fp;
+ _M_facets[__index] = __fp;
}
}
}