codecvt.html: Add more bits, format.
2000-08-28 Benjamin Kosnik <bkoz@purist.soma.redhat.com> * docs/22_locale/codecvt.html: Add more bits, format. * bits/codecvt.h: Add copy ctor, rename types. * testsuite/22_locale/codecvt_unicode_char.cc: Tweak. * libio/iofwide.c: Tweak. From-SVN: r36032
This commit is contained in:
parent
484fde9439
commit
ffe9f7851e
@ -1,7 +1,11 @@
|
||||
2000-08-28 Benjamin Kosnik <bkoz@purist.soma.redhat.com>
|
||||
|
||||
* docs/22_locale/codecvt.html: Add more bits, format.
|
||||
|
||||
* bits/codecvt.h: Add copy ctor, rename types.
|
||||
* testsuite/22_locale/codecvt_unicode_char.cc: Tweak.
|
||||
|
||||
* libio/iofwide.c: Tweak.
|
||||
|
||||
2000-08-28 Phil Edwards <pme@sources.redhat.com>
|
||||
|
||||
* docs/configopts.html: Mention new options.
|
||||
|
@ -45,7 +45,7 @@
|
||||
|
||||
namespace std
|
||||
{
|
||||
// XXX __enc_traits may need to move up the locale header heirarchy,
|
||||
// XXX __enc_traits may need to move up the locale header hierarchy,
|
||||
// depending on if ctype ends up using it.
|
||||
#ifdef _GLIBCPP_USE_WCHAR_T
|
||||
// Extensions to use icov for dealing with character encodings,
|
||||
@ -55,9 +55,10 @@ namespace std
|
||||
class __enc_traits
|
||||
{
|
||||
public:
|
||||
// Types:
|
||||
typedef iconv_t __conv_type;
|
||||
typedef mbstate_t __state_type;
|
||||
// Types:
|
||||
// NB: A conversion descriptor subsumes and enhances the
|
||||
// functionality of a simple state type such as mbstate_t.
|
||||
typedef iconv_t __desc_type;
|
||||
|
||||
protected:
|
||||
// Data Members:
|
||||
@ -69,9 +70,9 @@ namespace std
|
||||
char __extc_enc[__max_size];
|
||||
|
||||
// Conversion descriptor between external encoding to internal encoding.
|
||||
__conv_type __in_desc;
|
||||
__desc_type __in_desc;
|
||||
// Conversion descriptor between internal encoding to external encoding.
|
||||
__conv_type __out_desc;
|
||||
__desc_type __out_desc;
|
||||
|
||||
public:
|
||||
__enc_traits() : __in_desc(0), __out_desc(0)
|
||||
@ -89,8 +90,19 @@ namespace std
|
||||
__enc_traits(const char* __int, const char* __ext)
|
||||
: __in_desc(0), __out_desc(0)
|
||||
{
|
||||
strcpy(__intc_enc, __int);
|
||||
strcpy(__extc_enc, __ext);
|
||||
strncpy(__intc_enc, __int, __max_size);
|
||||
strncpy(__extc_enc, __ext, __max_size);
|
||||
}
|
||||
|
||||
// 21.1.2 traits typedefs
|
||||
// p4
|
||||
// typedef STATE_T state_type
|
||||
// requires: state_type shall meet the requirements of
|
||||
// CopyConstructible types (20.1.3)
|
||||
__enc_traits(const __enc_traits& __obj)
|
||||
{
|
||||
strncpy(__intc_enc, __obj.__intc_enc, __max_size);
|
||||
strncpy(__extc_enc, __obj.__extc_enc, __max_size);
|
||||
}
|
||||
|
||||
~__enc_traits()
|
||||
@ -118,11 +130,11 @@ namespace std
|
||||
&& __out_desc != iconv_t(-1) && __in_desc != iconv_t(-1);
|
||||
}
|
||||
|
||||
const __conv_type*
|
||||
const __desc_type*
|
||||
_M_get_in_descriptor()
|
||||
{ return &__in_desc; }
|
||||
|
||||
const __conv_type*
|
||||
const __desc_type*
|
||||
_M_get_out_descriptor()
|
||||
{ return &__out_desc; }
|
||||
|
||||
@ -133,15 +145,6 @@ namespace std
|
||||
const char*
|
||||
_M_get_external_enc()
|
||||
{ return __extc_enc; }
|
||||
|
||||
protected:
|
||||
// 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
|
||||
|
||||
@ -295,7 +298,7 @@ namespace std
|
||||
typedef _InternT intern_type;
|
||||
typedef _ExternT extern_type;
|
||||
typedef __enc_traits state_type;
|
||||
typedef __enc_traits::__conv_type __conv_type;
|
||||
typedef __enc_traits::__desc_type __desc_type;
|
||||
typedef __enc_traits __enc_type;
|
||||
|
||||
// Data Members:
|
||||
@ -360,8 +363,8 @@ namespace std
|
||||
result __ret = error;
|
||||
if (__state._M_good())
|
||||
{
|
||||
typedef state_type::__conv_type __conv_type;
|
||||
const __conv_type* __desc = __state._M_get_out_descriptor();
|
||||
typedef state_type::__desc_type __desc_type;
|
||||
const __desc_type* __desc = __state._M_get_out_descriptor();
|
||||
const size_t __fmultiple = sizeof(intern_type) / sizeof(char);
|
||||
size_t __flen = __fmultiple * (__from_end - __from);
|
||||
const size_t __tmultiple = sizeof(extern_type) / sizeof(char);
|
||||
@ -403,8 +406,8 @@ namespace std
|
||||
result __ret = error;
|
||||
if (__state._M_good())
|
||||
{
|
||||
typedef state_type::__conv_type __conv_type;
|
||||
const __conv_type* __desc = __state._M_get_in_descriptor();
|
||||
typedef state_type::__desc_type __desc_type;
|
||||
const __desc_type* __desc = __state._M_get_in_descriptor();
|
||||
const size_t __tmultiple = sizeof(intern_type) / sizeof(char);
|
||||
size_t __tlen = __tmultiple * (__to_end - __to);
|
||||
|
||||
@ -440,8 +443,8 @@ namespace std
|
||||
result __ret = error;
|
||||
if (__state._M_good())
|
||||
{
|
||||
typedef state_type::__conv_type __conv_type;
|
||||
const __conv_type* __desc = __state._M_get_in_descriptor();
|
||||
typedef state_type::__desc_type __desc_type;
|
||||
const __desc_type* __desc = __state._M_get_in_descriptor();
|
||||
const size_t __fmultiple = sizeof(extern_type) / sizeof(char);
|
||||
size_t __flen = __fmultiple * (__from_end - __from);
|
||||
const size_t __tmultiple = sizeof(intern_type) / sizeof(char);
|
||||
|
@ -155,6 +155,7 @@ _IO_fwide (fp, mode)
|
||||
cares about systems which changing internal charsets they
|
||||
should come up with a solution for the determination of the
|
||||
currently used internal character set. */
|
||||
#if 0
|
||||
const char *internal_ccs = _G_INTERNAL_CCS;
|
||||
const char *external_ccs = nl_langinfo(CODESET);
|
||||
|
||||
@ -164,6 +165,7 @@ _IO_fwide (fp, mode)
|
||||
cc->__cd_in = iconv_open (internal_ccs, external_ccs);
|
||||
if (cc->__cd_in != (iconv_t) -1)
|
||||
cc->__cd_out = iconv_open (external_ccs, internal_ccs);
|
||||
#endif
|
||||
}
|
||||
# else
|
||||
# error "somehow determine this from LC_CTYPE"
|
||||
|
@ -120,7 +120,7 @@ void test01()
|
||||
const unicode_codecvt& cvt = use_facet<unicode_codecvt>(loc);
|
||||
|
||||
// in
|
||||
unicode_codecvt::state_type state01("UNICODE", "ISO_8859-1");
|
||||
unicode_codecvt::state_type state01("UNICODE", "ISO-8859-15");
|
||||
initialize_state(state01);
|
||||
result r1 = cvt.in(state01, e_lit, e_lit + size, efrom_next,
|
||||
i_arr, i_arr + size, ito_next);
|
||||
@ -130,7 +130,7 @@ void test01()
|
||||
VERIFY( ito_next == i_arr + size );
|
||||
|
||||
// out
|
||||
unicode_codecvt::state_type state02("UNICODE", "ISO_8859-1");
|
||||
unicode_codecvt::state_type state02("UNICODE", "ISO-8859-15");
|
||||
initialize_state(state02);
|
||||
result r2 = cvt.out(state02, i_lit, i_lit + size, ifrom_next,
|
||||
e_arr, e_arr + size, eto_next);
|
||||
@ -141,7 +141,7 @@ void test01()
|
||||
|
||||
// unshift
|
||||
ext_traits::copy(e_arr, e_lit, size);
|
||||
unicode_codecvt::state_type state03("UNICODE", "ISO_8859-1");
|
||||
unicode_codecvt::state_type state03("UNICODE", "ISO-8859-15");
|
||||
initialize_state(state03);
|
||||
result r3 = cvt.unshift(state03, e_arr, e_arr + size, eto_next);
|
||||
VERIFY( r3 == codecvt_base::noconv );
|
||||
@ -153,7 +153,7 @@ void test01()
|
||||
|
||||
VERIFY( !cvt.always_noconv() );
|
||||
|
||||
unicode_codecvt::state_type state04("UNICODE", "ISO_8859-1");
|
||||
unicode_codecvt::state_type state04("UNICODE", "ISO-8859-15");
|
||||
initialize_state(state04);
|
||||
int j = cvt.length(state03, e_lit, e_lit + size, 5);
|
||||
VERIFY( j == 5 );
|
||||
|
Loading…
Reference in New Issue
Block a user