aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3
diff options
context:
space:
mode:
authorBenjamin Kosnik <bkoz@purist.soma.redhat.com>2000-08-11 07:32:37 +0000
committerBenjamin Kosnik <bkoz@gcc.gnu.org>2000-08-11 07:32:37 +0000
commit9c683c2adc2f3607bf63998f060d1ed2b7791cfd (patch)
treecb3f693d17076a20c4ec688a63bc832e901da3a2 /libstdc++-v3
parent4b48731a0df492d05be093582edacc6e6ab05f1b (diff)
downloadgcc-9c683c2adc2f3607bf63998f060d1ed2b7791cfd.zip
gcc-9c683c2adc2f3607bf63998f060d1ed2b7791cfd.tar.gz
gcc-9c683c2adc2f3607bf63998f060d1ed2b7791cfd.tar.bz2
locale_facets.tcc: Formatting tweaks.
2000-08-10 Benjamin Kosnik <bkoz@purist.soma.redhat.com> * bits/locale_facets.tcc: Formatting tweaks. * bits/locale_facets.h (__enc_traits): Start integrating this into codecvt, ctype. Formatting tweaks. From-SVN: r35621
Diffstat (limited to 'libstdc++-v3')
-rw-r--r--libstdc++-v3/ChangeLog6
-rw-r--r--libstdc++-v3/bits/locale_facets.h82
-rw-r--r--libstdc++-v3/bits/locale_facets.tcc2
3 files changed, 67 insertions, 23 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index dd8ed7e..620a3c5 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,9 @@
+2000-08-10 Benjamin Kosnik <bkoz@purist.soma.redhat.com>
+
+ * bits/locale_facets.tcc: Formatting tweaks.
+ * bits/locale_facets.h (__enc_traits): Start integrating this
+ into codecvt, ctype. Formatting tweaks.
+
2000-08-09 Benjamin Kosnik <bkoz@purist.soma.redhat.com>
Preliminary wchar_t implementation, with trivial encodings.
diff --git a/libstdc++-v3/bits/locale_facets.h b/libstdc++-v3/bits/locale_facets.h
index 65e8558..2bec595 100644
--- a/libstdc++-v3/bits/locale_facets.h
+++ b/libstdc++-v3/bits/locale_facets.h
@@ -84,24 +84,67 @@ namespace std
#ifdef _GLIBCPP_USE_WCHAR_T
// Extensions to use icov for dealing with character encodings,
// including conversions and comparisons between various character
- // sets. This object encapsulates data that codecvt and possibly
- // ctype will use.
+ // sets. This object encapsulates data that may need to be shared between
+ // char_traits, codecvt and ctype.
template<typename _IntT, typename _ExtT>
class __enc_traits
{
public:
// Types:
- typedef iconv_t __conv_type;
typedef _IntT __intc_type;
typedef _ExtT __extc_type;
-
- // max size of charset encoding name
+ typedef iconv_t __conv_type;
+ typedef mbstate_t __state_type;
+
+ // Data Members:
+ // Max size of charset encoding name
static const int __max_size = 32;
- // name of internal character set encoding.
+ // Name of internal character set encoding.
char __intc_enc[__max_size];
- // name of external character set encoding.
+ // Name of external character set encoding.
char __extc_enc[__max_size];
+ // Conversion descriptor between external encoding to internal encoding.
+ __conv_type __in_conv;
+ // Conversion descriptor between internal encoding to external encoding.
+ __conv_type __out_conv;
+
+ __enc_traits()
+ {
+ // __intc_end = whatever we are using internally, which is
+ // UCS4 (linux)
+ // UCS2 (microsoft, java, aix, whatever...)
+ // XXX Currently don't know how to get this data from target system...
+ strcpy(__intc_enc, "UCS4");
+
+ // __extc_end = external codeset in current locale
+ strcpy(__extc_enc, nl_langinfo(CODESET));
+ __in_conv = iconv_open(__intc_enc, __extc_enc);
+ __out_conv = iconv_open(__extc_enc, __intc_enc);
+ if (__out_conv == (iconv_t) -1 || __in_conv == (iconv_t) -1)
+ {
+ // XXX Extended error checking.
+ }
+ }
+
+ __enc_traits(const char* __int, const char* __ext)
+ {
+ strcpy(__intc_enc, __int);
+ strcpy(__extc_enc, __ext);
+ __in_conv = iconv_open(__intc_enc, __extc_enc);
+ __out_conv = iconv_open(__extc_enc, __intc_enc);
+ if (__out_conv == (iconv_t) -1 || __in_conv == (iconv_t) -1)
+ {
+ // XXX Extended error checking.
+ }
+ }
+
+ ~__enc_traits()
+ {
+ iconv_close(__in_conv);
+ iconv_close(__out_conv);
+ }
+
const char*
_M_get_intc_enc(void)
{ return __intc_enc; }
@@ -117,19 +160,14 @@ namespace std
void
_M_set_extc_enc(const char* __c)
{ strcpy(__extc_enc, __c); }
-
- __enc_traits(const char* __int, const char* __ext)
- {
- // __intc_end = whatever we are using internally, which is
- // almost alwyas UCS4 (linux) or UCS2 (microsoft, aix,
- // whatever...)
- // __extc_end = nl_langinfo(CODESET)
- strcpy(__intc_enc, __int);
- strcpy(__extc_enc, __ext);
- }
-
+
protected:
- __enc_traits();
+ // 21.1.2 traits typedefs
+ // p4
+ // typedef STATE_T state_type
+ // requires: state_type shall meet the requirements of
+ // CopyConstructible types (20.1.3)
+ // XXX because of this, these might actually need to be filled out.
__enc_traits(const __enc_traits&);
};
#endif //_GLIBCPP_USE_WCHAR_T
@@ -652,7 +690,7 @@ namespace std
template<typename _InternT, typename _ExternT, typename _StateT>
- class codecvt : public _Codecvt<_InternT,_ExternT,_StateT>
+ class codecvt : public _Codecvt<_InternT, _ExternT, _StateT>
{
public:
// Types:
@@ -665,14 +703,14 @@ namespace std
explicit
codecvt(size_t __refs = 0)
- : _Codecvt<_InternT,_ExternT,_StateT> (__refs) { }
+ : _Codecvt<_InternT, _ExternT, _StateT> (__refs) { }
protected:
virtual
~codecvt() { }
};
- // codecvt<char,char,mbstate_t> specialization
+ // codecvt<char, char, mbstate_t> specialization
template<>
class codecvt<char, char, mbstate_t>
: public _Codecvt<char, char, mbstate_t>
diff --git a/libstdc++-v3/bits/locale_facets.tcc b/libstdc++-v3/bits/locale_facets.tcc
index 539b051..ce6bb88 100644
--- a/libstdc++-v3/bits/locale_facets.tcc
+++ b/libstdc++-v3/bits/locale_facets.tcc
@@ -161,7 +161,7 @@ namespace std
locale::id ctype<_CharT>::id;
template<typename _InternT, typename _ExternT, typename _StateT>
- locale::id codecvt<_InternT,_ExternT,_StateT>::id;
+ locale::id codecvt<_InternT, _ExternT, _StateT>::id;
template<typename _CharT>
int _Format_cache<_CharT>::_S_pword_ix;