enc_filebuf.h: Resurrect, update.
2007-01-29 Benjamin Kosnik <bkoz@redhat.com> * include/ext/enc_filebuf.h: Resurrect, update. * include/ext/codecvt_specializations.h: Remove _GLIBCXX_USE_ICONV, _GLIBCXX_USE_ENCODING_STATE. * include/bits/localefwd.h: Remove declaration for __enc_traits. * docs/html/22_locale/codecvt.html: Change __enc_traits to encoding_state. * scripts/testsuite_flags.in: Remove ICONV. * configure.ac: Remove GLIBCXX_CHECK_ICONV_SUPPORT. * acinclude.m4 (GLIBCXX_CHECK_ICONV_SUPPORT): Remove. * crossconfig.m4: Remove use of GLIBCXX_CHECK_ICONV_SUPPORT. * config.h.in: Remove HAVE_ICONV_CLOSE, HAVE_ICONV_OPEN, HAVE_NL_LANGINFO, _GLIBCXX_USE_ICONV. * include/Makefile.am: Uglify ICONV_CONST. * configure: Regenerate. * aclocal.m4: Regenerate. * Makefile.in: Regenerate. * src/Makefile.in: Regenerate. * po/Makefile.in: Regenerate. * libmath/Makefile.in: Regenerate. * include/Makefile.in: Regenerate. * libsupc++/Makefile.in: Regenerate. * testsuite/Makefile.in: Regenerate. * testsuite/ext/enc_filebuf/wchar_t/13189.cc: Use dg-require-iconv, fix up for encoding_state changes. * testsuite/ext/enc_filebuf/char/13189.cc: Same. * testsuite/ext/enc_filebuf/char/13598.cc: Same. * testsuite/22_locale/codecvt/unicode: Move... * testsuite/22_locale/codecvt/unicode/char.cc: Move... * testsuite/22_locale/codecvt/unicode/1.cc: Move... * testsuite/22_locale/codecvt/unicode/wchar_t.cc: Move... * testsuite/ext/codecvt: New. * testsuite/ext/codecvt/char-1.cc: ...here. Also, use dg-require-iconv. * testsuite/ext/codecvt/char-2.cc: ...here. Same. * testsuite/ext/codecvt/1.cc: ...here. Same. * testsuite/ext/codecvt/wchar_t.cc: ...here. Same. * testsuite/22_locale/locale/cons/unicode: Delete directory. * testsuite/22_locale/locale/cons/unicode/1.cc: Move... * testsuite/22_locale/locale/cons/unicode.cc: ...here. From-SVN: r121297
This commit is contained in:
parent
68254f23e8
commit
4ffe6e87dc
|
@ -1,3 +1,46 @@
|
|||
2007-01-29 Benjamin Kosnik <bkoz@redhat.com>
|
||||
|
||||
* include/ext/enc_filebuf.h: Resurrect, update.
|
||||
* include/ext/codecvt_specializations.h: Remove
|
||||
_GLIBCXX_USE_ICONV, _GLIBCXX_USE_ENCODING_STATE.
|
||||
* include/bits/localefwd.h: Remove declaration for __enc_traits.
|
||||
* docs/html/22_locale/codecvt.html: Change __enc_traits to
|
||||
encoding_state.
|
||||
* scripts/testsuite_flags.in: Remove ICONV.
|
||||
|
||||
* configure.ac: Remove GLIBCXX_CHECK_ICONV_SUPPORT.
|
||||
* acinclude.m4 (GLIBCXX_CHECK_ICONV_SUPPORT): Remove.
|
||||
* crossconfig.m4: Remove use of GLIBCXX_CHECK_ICONV_SUPPORT.
|
||||
* config.h.in: Remove HAVE_ICONV_CLOSE, HAVE_ICONV_OPEN,
|
||||
HAVE_NL_LANGINFO, _GLIBCXX_USE_ICONV.
|
||||
* include/Makefile.am: Uglify ICONV_CONST.
|
||||
* configure: Regenerate.
|
||||
* aclocal.m4: Regenerate.
|
||||
* Makefile.in: Regenerate.
|
||||
* src/Makefile.in: Regenerate.
|
||||
* po/Makefile.in: Regenerate.
|
||||
* libmath/Makefile.in: Regenerate.
|
||||
* include/Makefile.in: Regenerate.
|
||||
* libsupc++/Makefile.in: Regenerate.
|
||||
* testsuite/Makefile.in: Regenerate.
|
||||
|
||||
* testsuite/ext/enc_filebuf/wchar_t/13189.cc: Use
|
||||
dg-require-iconv, fix up for encoding_state changes.
|
||||
* testsuite/ext/enc_filebuf/char/13189.cc: Same.
|
||||
* testsuite/ext/enc_filebuf/char/13598.cc: Same.
|
||||
* testsuite/22_locale/codecvt/unicode: Move...
|
||||
* testsuite/22_locale/codecvt/unicode/char.cc: Move...
|
||||
* testsuite/22_locale/codecvt/unicode/1.cc: Move...
|
||||
* testsuite/22_locale/codecvt/unicode/wchar_t.cc: Move...
|
||||
* testsuite/ext/codecvt: New.
|
||||
* testsuite/ext/codecvt/char-1.cc: ...here. Also, use dg-require-iconv.
|
||||
* testsuite/ext/codecvt/char-2.cc: ...here. Same.
|
||||
* testsuite/ext/codecvt/1.cc: ...here. Same.
|
||||
* testsuite/ext/codecvt/wchar_t.cc: ...here. Same.
|
||||
* testsuite/22_locale/locale/cons/unicode: Delete directory.
|
||||
* testsuite/22_locale/locale/cons/unicode/1.cc: Move...
|
||||
* testsuite/22_locale/locale/cons/unicode.cc: ...here.
|
||||
|
||||
2007-01-28 Paolo Carlini <pcarlini@suse.de>
|
||||
|
||||
* include/bits/locale_facets.tcc (num_get<>::do_get(iter_type,
|
||||
|
|
|
@ -46,7 +46,11 @@ DIST_COMMON = README $(am__configure_deps) $(srcdir)/../config.guess \
|
|||
subdir = .
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
|
||||
$(top_srcdir)/../config/iconv.m4 \
|
||||
$(top_srcdir)/../config/lead-dot.m4 \
|
||||
$(top_srcdir)/../config/lib-ld.m4 \
|
||||
$(top_srcdir)/../config/lib-link.m4 \
|
||||
$(top_srcdir)/../config/lib-prefix.m4 \
|
||||
$(top_srcdir)/../config/multi.m4 \
|
||||
$(top_srcdir)/../config/no-executables.m4 \
|
||||
$(top_srcdir)/../config/unwind_ipinfo.m4 \
|
||||
|
@ -171,6 +175,7 @@ LIBS = @LIBS@
|
|||
LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
LTLIBICONV = @LTLIBICONV@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
|
|
|
@ -309,64 +309,6 @@ AC_DEFUN([GLIBCXX_CHECK_LINKER_FEATURES], [
|
|||
])
|
||||
|
||||
|
||||
dnl
|
||||
dnl Check to see if this target can enable the iconv specializations.
|
||||
dnl If --disable-c-mbchar was given, no wchar_t specialization is enabled.
|
||||
dnl (This must have been previously checked, along with the rest of C99
|
||||
dnl support.) By default, iconv support is disabled.
|
||||
dnl
|
||||
dnl Defines:
|
||||
dnl _GLIBCXX_USE_ICONV if all the bits are found.
|
||||
dnl Substs:
|
||||
dnl LIBICONV to a -l string containing the iconv library, if needed.
|
||||
dnl
|
||||
AC_DEFUN([GLIBCXX_CHECK_ICONV_SUPPORT], [
|
||||
|
||||
enable_iconv=no
|
||||
# Only continue checking if the ISO C99 headers exist and support is on.
|
||||
if test x"$enable_wchar_t" = xyes; then
|
||||
|
||||
# From Bruno Haible's AM_ICONV, but without link tests.
|
||||
# Check for existence of libiconv.a providing XPG2 wchar_t support.
|
||||
# Some systems have iconv in libc, some have it in libiconv (OSF/1 and
|
||||
# those with the standalone portable GNU libiconv installed).
|
||||
AC_ARG_WITH([libiconv-prefix],
|
||||
[ --with-libiconv-prefix=DIR search for libiconv in DIR/include and DIR/lib], [ for dir in `echo "$withval" | tr : ' '`; do
|
||||
if test -d $dir/include; then CPPFLAGS="$CPPFLAGS -I$dir/include"; fi
|
||||
if test -d $dir/lib; then LIBICONV="$LIBICONV -L$dir/lib"; fi
|
||||
done
|
||||
LIBICONV="$LIBICONV -liconv"
|
||||
])
|
||||
if test x"$LIBICONV" != x; then
|
||||
AC_MSG_NOTICE([--with-libiconv-prefix is $LIBICONV])
|
||||
fi
|
||||
|
||||
# Use iconv for wchar_t to char conversions. As such, check for
|
||||
# X/Open Portability Guide, version 2 features (XPG2).
|
||||
AC_CHECK_HEADER(iconv.h, ac_has_iconv_h=yes, ac_has_iconv_h=no)
|
||||
AC_CHECK_HEADER(langinfo.h, ac_has_langinfo_h=yes, ac_has_langinfo_h=no)
|
||||
|
||||
ac_save_LIBS="$LIBS"
|
||||
LIBS="$LIBS $LIBICONV"
|
||||
AC_CHECK_FUNCS([iconv_open iconv_close iconv nl_langinfo],
|
||||
[ac_XPG2funcs=yes], [ac_XPG2funcs=no])
|
||||
LIBS="$ac_save_LIBS"
|
||||
|
||||
if test x"$ac_has_iconv_h" = xyes &&
|
||||
test x"$ac_has_langinfo_h" = xyes &&
|
||||
test x"$ac_XPG2funcs" = xyes;
|
||||
then
|
||||
AC_DEFINE([_GLIBCXX_USE_ICONV],1,
|
||||
[Define if iconv and related functions exist and are usable.])
|
||||
enable_iconv=yes
|
||||
AC_SUBST(LIBICONV)
|
||||
fi
|
||||
fi
|
||||
AC_MSG_CHECKING([for enabled iconv specializations])
|
||||
AC_MSG_RESULT($enable_iconv)
|
||||
])
|
||||
|
||||
|
||||
dnl
|
||||
dnl Check for headers for, and arguments to, the setrlimit() function.
|
||||
dnl Used only in testsuite_hooks.h. Called from GLIBCXX_CONFIGURE_TESTSUITE.
|
||||
|
|
|
@ -581,7 +581,11 @@ AC_SUBST([am__untar])
|
|||
]) # _AM_PROG_TAR
|
||||
|
||||
m4_include([../config/enable.m4])
|
||||
m4_include([../config/iconv.m4])
|
||||
m4_include([../config/lead-dot.m4])
|
||||
m4_include([../config/lib-ld.m4])
|
||||
m4_include([../config/lib-link.m4])
|
||||
m4_include([../config/lib-prefix.m4])
|
||||
m4_include([../config/multi.m4])
|
||||
m4_include([../config/no-executables.m4])
|
||||
m4_include([../config/unwind_ipinfo.m4])
|
||||
|
|
|
@ -130,15 +130,9 @@
|
|||
/* Define to 1 if you have the `hypotl' function. */
|
||||
#undef HAVE_HYPOTL
|
||||
|
||||
/* Define to 1 if you have the `iconv' function. */
|
||||
/* Define if you have the iconv() function. */
|
||||
#undef HAVE_ICONV
|
||||
|
||||
/* Define to 1 if you have the `iconv_close' function. */
|
||||
#undef HAVE_ICONV_CLOSE
|
||||
|
||||
/* Define to 1 if you have the `iconv_open' function. */
|
||||
#undef HAVE_ICONV_OPEN
|
||||
|
||||
/* Define to 1 if you have the <ieeefp.h> header file. */
|
||||
#undef HAVE_IEEEFP_H
|
||||
|
||||
|
@ -241,9 +235,6 @@
|
|||
/* Define to 1 if you have the <nan.h> header file. */
|
||||
#undef HAVE_NAN_H
|
||||
|
||||
/* Define to 1 if you have the `nl_langinfo' function. */
|
||||
#undef HAVE_NL_LANGINFO
|
||||
|
||||
/* Define if poll is available in <poll.h>. */
|
||||
#undef HAVE_POLL
|
||||
|
||||
|
@ -634,6 +625,9 @@
|
|||
/* Define to 1 if you have the `__signbitl' function. */
|
||||
#undef HAVE___SIGNBITL
|
||||
|
||||
/* Define as const if the declaration of iconv() needs const. */
|
||||
#undef ICONV_CONST
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
|
@ -735,9 +729,6 @@
|
|||
namespace std::tr1. */
|
||||
#undef _GLIBCXX_USE_C99_STDINT_TR1
|
||||
|
||||
/* Define if iconv and related functions exist and are usable. */
|
||||
#undef _GLIBCXX_USE_ICONV
|
||||
|
||||
/* Define if LFS support is available. */
|
||||
#undef _GLIBCXX_USE_LFS
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -86,6 +86,7 @@ AC_LIBTOOL_DLOPEN
|
|||
AM_PROG_LIBTOOL
|
||||
AC_SUBST(enable_shared)
|
||||
AC_SUBST(enable_static)
|
||||
AM_ICONV
|
||||
|
||||
# Possibly disable most of the library.
|
||||
## TODO: Consider skipping unncessary tests altogether in this case, rather
|
||||
|
@ -140,7 +141,6 @@ if $GLIBCXX_IS_NATIVE; then
|
|||
GLIBCXX_CHECK_MATH_SUPPORT
|
||||
GLIBCXX_CHECK_BUILTIN_MATH_SUPPORT
|
||||
GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
|
||||
GLIBCXX_CHECK_ICONV_SUPPORT
|
||||
GLIBCXX_CHECK_STDLIB_SUPPORT
|
||||
|
||||
# For showmanyc_helper().
|
||||
|
|
|
@ -21,7 +21,6 @@ case "${host}" in
|
|||
GLIBCXX_CHECK_MATH_SUPPORT
|
||||
GLIBCXX_CHECK_BUILTIN_MATH_SUPPORT
|
||||
GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
|
||||
GLIBCXX_CHECK_ICONV_SUPPORT
|
||||
GLIBCXX_CHECK_STDLIB_SUPPORT
|
||||
|
||||
# For showmanyc_helper().
|
||||
|
@ -55,7 +54,6 @@ case "${host}" in
|
|||
GLIBCXX_CHECK_MATH_SUPPORT
|
||||
GLIBCXX_CHECK_BUILTIN_MATH_SUPPORT
|
||||
GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
|
||||
GLIBCXX_CHECK_ICONV_SUPPORT
|
||||
GLIBCXX_CHECK_STDLIB_SUPPORT
|
||||
GLIBCXX_CHECK_S_ISREG_OR_S_IFREG
|
||||
AC_DEFINE(HAVE_WRITEV)
|
||||
|
@ -70,7 +68,6 @@ case "${host}" in
|
|||
AC_SUBST(SECTION_FLAGS)
|
||||
GLIBCXX_CHECK_LINKER_FEATURES
|
||||
GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
|
||||
GLIBCXX_CHECK_ICONV_SUPPORT
|
||||
AC_DEFINE(HAVE_LC_MESSAGES)
|
||||
AC_DEFINE(HAVE_GETPAGESIZE)
|
||||
AC_DEFINE(HAVE_SETENV)
|
||||
|
@ -125,7 +122,6 @@ case "${host}" in
|
|||
AC_SUBST(SECTION_FLAGS)
|
||||
GLIBCXX_CHECK_LINKER_FEATURES
|
||||
GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
|
||||
GLIBCXX_CHECK_ICONV_SUPPORT
|
||||
AC_DEFINE(HAVE_COPYSIGN)
|
||||
AC_DEFINE(HAVE_COPYSIGNF)
|
||||
AC_DEFINE(HAVE_FREXPF)
|
||||
|
@ -152,7 +148,6 @@ case "${host}" in
|
|||
GLIBCXX_CHECK_MATH_SUPPORT
|
||||
GLIBCXX_CHECK_BUILTIN_MATH_SUPPORT
|
||||
GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
|
||||
GLIBCXX_CHECK_ICONV_SUPPORT
|
||||
GLIBCXX_CHECK_STDLIB_SUPPORT
|
||||
|
||||
# For LFS.
|
||||
|
@ -181,7 +176,6 @@ case "${host}" in
|
|||
AC_SUBST(SECTION_FLAGS)
|
||||
GLIBCXX_CHECK_LINKER_FEATURES
|
||||
GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
|
||||
GLIBCXX_CHECK_ICONV_SUPPORT
|
||||
AC_DEFINE(HAVE_COPYSIGN)
|
||||
AC_DEFINE(HAVE_COPYSIGNF)
|
||||
AC_DEFINE(HAVE_FINITEF)
|
||||
|
@ -205,7 +199,6 @@ case "${host}" in
|
|||
AC_SUBST(SECTION_FLAGS)
|
||||
GLIBCXX_CHECK_LINKER_FEATURES
|
||||
GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
|
||||
GLIBCXX_CHECK_ICONV_SUPPORT
|
||||
AC_DEFINE(HAVE_HYPOT)
|
||||
AC_DEFINE(HAVE_ISINF)
|
||||
AC_DEFINE(HAVE_ISNAN)
|
||||
|
@ -224,7 +217,6 @@ case "${host}" in
|
|||
AC_SUBST(SECTION_FLAGS)
|
||||
GLIBCXX_CHECK_LINKER_FEATURES
|
||||
GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
|
||||
GLIBCXX_CHECK_ICONV_SUPPORT
|
||||
AC_DEFINE(HAVE_COSF)
|
||||
AC_DEFINE(HAVE_COSL)
|
||||
AC_DEFINE(HAVE_COSHF)
|
||||
|
@ -257,16 +249,8 @@ case "${host}" in
|
|||
AC_DEFINE(HAVE_FINITE)
|
||||
AC_DEFINE(HAVE_FPCLASS)
|
||||
AC_DEFINE(HAVE_GETPAGESIZE)
|
||||
AC_DEFINE(HAVE_NL_LANGINFO)
|
||||
AC_DEFINE(HAVE_ICONV)
|
||||
AC_DEFINE(HAVE_ICONV_CLOSE)
|
||||
AC_DEFINE(HAVE_ICONV_OPEN)
|
||||
# Look for the pieces required for wchar_t support in order to
|
||||
# get all the right HAVE_* macros defined.
|
||||
GLIBCXX_CHECK_ICONV_SUPPORT
|
||||
# All of the dependencies for wide character support are here, so
|
||||
# turn it on. This requires some syncronization with the
|
||||
# GLIBCXX_CHECK_ICONV_SUPPORT in acinclude.m4
|
||||
# turn it on.
|
||||
AC_DEFINE(_GLIBCXX_USE_WCHAR_T)
|
||||
# Are these tested for even when cross?
|
||||
AC_DEFINE(HAVE_FLOAT_H)
|
||||
|
@ -321,7 +305,6 @@ case "${host}" in
|
|||
AC_SUBST(SECTION_FLAGS)
|
||||
GLIBCXX_CHECK_LINKER_FEATURES
|
||||
GLIBCXX_CHECK_COMPLEX_MATH_SUPPORT
|
||||
GLIBCXX_CHECK_ICONV_SUPPORT
|
||||
AC_DEFINE(HAVE_COPYSIGN)
|
||||
AC_DEFINE(HAVE_COPYSIGNF)
|
||||
AC_DEFINE(HAVE_FINITE)
|
||||
|
|
|
@ -315,7 +315,7 @@ to wchar_t and wcsrtombs for conversions between wchar_t and char.
|
|||
<p>
|
||||
Neither of these two required specializations deals with Unicode
|
||||
characters. As such, libstdc++-v3 implements a partial specialization
|
||||
of the codecvt class with and iconv wrapper class, __enc_traits as the
|
||||
of the codecvt class with and iconv wrapper class, encoding_state as the
|
||||
third template parameter.
|
||||
</p>
|
||||
|
||||
|
@ -331,19 +331,19 @@ constructible.
|
|||
</p>
|
||||
|
||||
<p>
|
||||
As such, the type __enc_traits is defined as a non-templatized, POD
|
||||
As such, the type encoding_state is defined as a non-templatized, POD
|
||||
type to be used as the third type of a codecvt instantiation. This
|
||||
type is just a wrapper class for iconv, and provides an easy interface
|
||||
to iconv functionality.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
There are two constructors for __enc_traits:
|
||||
There are two constructors for encoding_state:
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<code>
|
||||
__enc_traits() : __in_desc(0), __out_desc(0)
|
||||
encoding_state() : __in_desc(0), __out_desc(0)
|
||||
</code>
|
||||
</p>
|
||||
<p>
|
||||
|
@ -354,7 +354,7 @@ nl_langinfo(CODESET).
|
|||
|
||||
<p>
|
||||
<code>
|
||||
__enc_traits(const char* __int, const char* __ext)
|
||||
encoding_state(const char* __int, const char* __ext)
|
||||
</code>
|
||||
</p>
|
||||
<p>
|
||||
|
@ -382,7 +382,7 @@ _M_init()
|
|||
</p>
|
||||
<p>
|
||||
Strangely enough, this member function attempts to open conversion
|
||||
descriptors for a given __enc_traits object. If the conversion
|
||||
descriptors for a given encoding_state object. If the conversion
|
||||
descriptors are not valid, the conversion descriptors returned will
|
||||
not be valid and the resulting calls to the codecvt conversion
|
||||
functions will return error.
|
||||
|
@ -395,7 +395,7 @@ _M_good()
|
|||
</code>
|
||||
</p>
|
||||
<p>
|
||||
Provides a way to see if the given __enc_traits object has been
|
||||
Provides a way to see if the given encoding_state object has been
|
||||
properly initialized. If the string literals describing the desired
|
||||
internal and external encoding are not valid, initialization will
|
||||
fail, and this will return false. If the internal and external
|
||||
|
@ -406,7 +406,7 @@ ready to convert and will return true.
|
|||
|
||||
<p>
|
||||
<code>
|
||||
__enc_traits(const __enc_traits&)
|
||||
encoding_state(const encoding_state&)
|
||||
</code>
|
||||
</p>
|
||||
<p>
|
||||
|
@ -419,7 +419,7 @@ themselves.
|
|||
<p>
|
||||
Definitions for all the required codecvt member functions are provided
|
||||
for this specialization, and usage of codecvt<internal character type,
|
||||
external character type, __enc_traits> is consistent with other
|
||||
external character type, encoding_state> is consistent with other
|
||||
codecvt usage.
|
||||
</p>
|
||||
|
||||
|
@ -436,8 +436,8 @@ codecvt usage.
|
|||
typedef unsigned short unicode_t;
|
||||
typedef unicode_t int_type;
|
||||
typedef char ext_type;
|
||||
typedef __enc_traits enc_type;
|
||||
typedef codecvt<int_type, ext_type, enc_type> unicode_codecvt;
|
||||
typedef encoding_state state_type;
|
||||
typedef codecvt<int_type, ext_type, state_type> unicode_codecvt;
|
||||
|
||||
const ext_type* e_lit = "black pearl jasmine tea";
|
||||
int size = strlen(e_lit);
|
||||
|
|
|
@ -490,6 +490,7 @@ ext_headers = \
|
|||
${ext_srcdir}/codecvt_specializations.h \
|
||||
${ext_srcdir}/concurrence.h \
|
||||
${ext_srcdir}/debug_allocator.h \
|
||||
${ext_srcdir}/enc_filebuf.h \
|
||||
${ext_srcdir}/stdio_filebuf.h \
|
||||
${ext_srcdir}/stdio_sync_filebuf.h \
|
||||
${ext_srcdir}/functional \
|
||||
|
@ -956,6 +957,7 @@ ${host_builddir}/c++config.h: ${CONFIG_HEADER} \
|
|||
-e 's/PACKAGE/_GLIBCXX_PACKAGE/g' \
|
||||
-e 's/VERSION/_GLIBCXX_VERSION/g' \
|
||||
-e 's/WORDS_/_GLIBCXX_WORDS_/g' \
|
||||
-e 's/ICONV_CONST/_GLIBCXX_ICONV_CONST/g' \
|
||||
-e '/[ ]_GLIBCXX_LONG_DOUBLE_COMPAT[ ]/d' \
|
||||
< ${CONFIG_HEADER} >> $@ ;\
|
||||
echo "" >> $@ ;\
|
||||
|
|
|
@ -41,7 +41,11 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
|
|||
subdir = include
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
|
||||
$(top_srcdir)/../config/iconv.m4 \
|
||||
$(top_srcdir)/../config/lead-dot.m4 \
|
||||
$(top_srcdir)/../config/lib-ld.m4 \
|
||||
$(top_srcdir)/../config/lib-link.m4 \
|
||||
$(top_srcdir)/../config/lib-prefix.m4 \
|
||||
$(top_srcdir)/../config/multi.m4 \
|
||||
$(top_srcdir)/../config/no-executables.m4 \
|
||||
$(top_srcdir)/../config/unwind_ipinfo.m4 \
|
||||
|
@ -139,6 +143,7 @@ LIBS = @LIBS@
|
|||
LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
LTLIBICONV = @LTLIBICONV@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
|
@ -711,6 +716,7 @@ ext_headers = \
|
|||
${ext_srcdir}/codecvt_specializations.h \
|
||||
${ext_srcdir}/concurrence.h \
|
||||
${ext_srcdir}/debug_allocator.h \
|
||||
${ext_srcdir}/enc_filebuf.h \
|
||||
${ext_srcdir}/stdio_filebuf.h \
|
||||
${ext_srcdir}/stdio_sync_filebuf.h \
|
||||
${ext_srcdir}/functional \
|
||||
|
@ -1331,6 +1337,7 @@ ${host_builddir}/c++config.h: ${CONFIG_HEADER} \
|
|||
-e 's/PACKAGE/_GLIBCXX_PACKAGE/g' \
|
||||
-e 's/VERSION/_GLIBCXX_VERSION/g' \
|
||||
-e 's/WORDS_/_GLIBCXX_WORDS_/g' \
|
||||
-e 's/ICONV_CONST/_GLIBCXX_ICONV_CONST/g' \
|
||||
-e '/[ ]_GLIBCXX_LONG_DOUBLE_COMPAT[ ]/d' \
|
||||
< ${CONFIG_HEADER} >> $@ ;\
|
||||
echo "" >> $@ ;\
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Locale support -*- C++ -*-
|
||||
|
||||
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006
|
||||
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006, 2007
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
|
@ -118,7 +118,6 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
|||
// NB: Specialized for char and wchar_t in locale_facets.h.
|
||||
|
||||
class codecvt_base;
|
||||
class __enc_traits;
|
||||
template<typename _InternT, typename _ExternT, typename _StateT>
|
||||
class codecvt;
|
||||
template<> class codecvt<char, char, mbstate_t>;
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
// Locale support (codecvt) -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006
|
||||
// Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
|
||||
// Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
|
@ -42,16 +42,9 @@
|
|||
#define _EXT_CODECVT_SPECIALIZATIONS_H 1
|
||||
|
||||
#include <bits/c++config.h>
|
||||
|
||||
#ifdef _GLIBCXX_USE_ICONV
|
||||
|
||||
#include <locale>
|
||||
#include <iconv.h>
|
||||
|
||||
// XXX
|
||||
// Define this here so codecvt.cc can have _S_max_size definition.
|
||||
#define _GLIBCXX_USE_ENCODING_STATE 1
|
||||
|
||||
_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
|
||||
|
||||
/// @brief Extension to use icov for dealing with character encodings.
|
||||
|
@ -517,5 +510,3 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
|
|||
_GLIBCXX_END_NAMESPACE
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -0,0 +1,67 @@
|
|||
// filebuf with encoding state type -*- C++ -*-
|
||||
|
||||
// Copyright (C) 2002, 2003, 2004, 2007 Free Software Foundation, Inc.
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 2, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License along
|
||||
// with this library; see the file COPYING. If not, write to the Free
|
||||
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
// USA.
|
||||
|
||||
// As a special exception, you may use this file as part of a free software
|
||||
// library without restriction. Specifically, if other files instantiate
|
||||
// templates or use macros or inline functions from this file, or you compile
|
||||
// this file and link it with other files to produce an executable, this
|
||||
// file does not by itself cause the resulting executable to be covered by
|
||||
// the GNU General Public License. This exception does not however
|
||||
// invalidate any other reasons why the executable file might be covered by
|
||||
// the GNU General Public License.
|
||||
|
||||
/** @file ext/enc_filebuf.h
|
||||
* This file is a GNU extension to the Standard C++ Library.
|
||||
*/
|
||||
|
||||
#ifndef _EXT_ENC_FILEBUF_H
|
||||
#define _EXT_ENC_FILEBUF_H 1
|
||||
|
||||
#include <fstream>
|
||||
#include <locale>
|
||||
#include <ext/codecvt_specializations.h>
|
||||
|
||||
_GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
|
||||
|
||||
/// @brief class enc_filebuf.
|
||||
template<typename _CharT>
|
||||
class enc_filebuf
|
||||
: public std::basic_filebuf<_CharT, encoding_char_traits<_CharT> >
|
||||
{
|
||||
public:
|
||||
typedef encoding_char_traits<_CharT> traits_type;
|
||||
typedef typename traits_type::state_type state_type;
|
||||
typedef typename traits_type::pos_type pos_type;
|
||||
|
||||
enc_filebuf(state_type& __state)
|
||||
: std::basic_filebuf<_CharT, encoding_char_traits<_CharT> >()
|
||||
{ this->_M_state_beg = __state; }
|
||||
|
||||
private:
|
||||
// concept requirements:
|
||||
// Set state type to something useful.
|
||||
// Something more than copyconstructible is needed here, so
|
||||
// require default and copy constructible + assignment operator.
|
||||
__glibcxx_class_requires(state_type, _SGIAssignableConcept)
|
||||
};
|
||||
|
||||
_GLIBCXX_END_NAMESPACE
|
||||
|
||||
#endif
|
|
@ -41,7 +41,11 @@ subdir = libmath
|
|||
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
|
||||
$(top_srcdir)/../config/iconv.m4 \
|
||||
$(top_srcdir)/../config/lead-dot.m4 \
|
||||
$(top_srcdir)/../config/lib-ld.m4 \
|
||||
$(top_srcdir)/../config/lib-link.m4 \
|
||||
$(top_srcdir)/../config/lib-prefix.m4 \
|
||||
$(top_srcdir)/../config/multi.m4 \
|
||||
$(top_srcdir)/../config/no-executables.m4 \
|
||||
$(top_srcdir)/../config/unwind_ipinfo.m4 \
|
||||
|
@ -156,6 +160,7 @@ LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
|
|||
# Only compiling "C" sources in this directory.
|
||||
LIBTOOL = @LIBTOOL@ --tag CC
|
||||
LN_S = @LN_S@
|
||||
LTLIBICONV = @LTLIBICONV@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
|
|
|
@ -43,7 +43,11 @@ DIST_COMMON = $(glibcxxinstall_HEADERS) $(srcdir)/Makefile.am \
|
|||
subdir = libsupc++
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
|
||||
$(top_srcdir)/../config/iconv.m4 \
|
||||
$(top_srcdir)/../config/lead-dot.m4 \
|
||||
$(top_srcdir)/../config/lib-ld.m4 \
|
||||
$(top_srcdir)/../config/lib-link.m4 \
|
||||
$(top_srcdir)/../config/lib-prefix.m4 \
|
||||
$(top_srcdir)/../config/multi.m4 \
|
||||
$(top_srcdir)/../config/no-executables.m4 \
|
||||
$(top_srcdir)/../config/unwind_ipinfo.m4 \
|
||||
|
@ -195,6 +199,7 @@ LIBS = @LIBS@
|
|||
LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
LTLIBICONV = @LTLIBICONV@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
|
|
|
@ -41,7 +41,11 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
|
|||
subdir = po
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
|
||||
$(top_srcdir)/../config/iconv.m4 \
|
||||
$(top_srcdir)/../config/lead-dot.m4 \
|
||||
$(top_srcdir)/../config/lib-ld.m4 \
|
||||
$(top_srcdir)/../config/lib-link.m4 \
|
||||
$(top_srcdir)/../config/lib-prefix.m4 \
|
||||
$(top_srcdir)/../config/multi.m4 \
|
||||
$(top_srcdir)/../config/no-executables.m4 \
|
||||
$(top_srcdir)/../config/unwind_ipinfo.m4 \
|
||||
|
@ -139,6 +143,7 @@ LIBS = @LIBS@
|
|||
LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
LTLIBICONV = @LTLIBICONV@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
|
|
|
@ -58,7 +58,7 @@ case ${query} in
|
|||
echo ${PCHFLAGS}
|
||||
;;
|
||||
--cxxldflags)
|
||||
SECTIONLDFLAGS="@SECTION_LDFLAGS@ @LIBICONV@"
|
||||
SECTIONLDFLAGS="@SECTION_LDFLAGS@"
|
||||
echo ${SECTIONLDFLAGS}
|
||||
;;
|
||||
*)
|
||||
|
|
|
@ -41,7 +41,11 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
|
|||
subdir = src
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
|
||||
$(top_srcdir)/../config/iconv.m4 \
|
||||
$(top_srcdir)/../config/lead-dot.m4 \
|
||||
$(top_srcdir)/../config/lib-ld.m4 \
|
||||
$(top_srcdir)/../config/lib-link.m4 \
|
||||
$(top_srcdir)/../config/lib-prefix.m4 \
|
||||
$(top_srcdir)/../config/multi.m4 \
|
||||
$(top_srcdir)/../config/no-executables.m4 \
|
||||
$(top_srcdir)/../config/unwind_ipinfo.m4 \
|
||||
|
@ -189,6 +193,7 @@ LIBS = @LIBS@
|
|||
LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
LTLIBICONV = @LTLIBICONV@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
|
|
|
@ -1,147 +0,0 @@
|
|||
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
|
||||
|
||||
// Copyright (C) 2003 Free Software Foundation
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 2, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License along
|
||||
// with this library; see the file COPYING. If not, write to the Free
|
||||
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
// USA.
|
||||
|
||||
// 22.2.1.5 - Template class codecvt [lib.locale.codecvt]
|
||||
|
||||
#include <locale>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
|
||||
|
||||
#ifdef _GLIBCXX_USE___ENC_TRAITS
|
||||
|
||||
// Need some char_traits specializations for this to work.
|
||||
typedef unsigned short unicode_t;
|
||||
|
||||
namespace std
|
||||
{
|
||||
template<>
|
||||
struct char_traits<unicode_t>
|
||||
{
|
||||
typedef unicode_t char_type;
|
||||
// Unsigned as wint_t is unsigned.
|
||||
typedef unsigned long int_type;
|
||||
typedef streampos pos_type;
|
||||
typedef streamoff off_type;
|
||||
typedef mbstate_t state_type;
|
||||
|
||||
static void
|
||||
assign(char_type& __c1, const char_type& __c2);
|
||||
|
||||
static bool
|
||||
eq(const char_type& __c1, const char_type& __c2);
|
||||
|
||||
static bool
|
||||
lt(const char_type& __c1, const char_type& __c2);
|
||||
|
||||
static int
|
||||
compare(const char_type* __s1, const char_type* __s2, size_t __n)
|
||||
{ return memcmp(__s1, __s2, __n); }
|
||||
|
||||
static size_t
|
||||
length(const char_type* __s);
|
||||
|
||||
static const char_type*
|
||||
find(const char_type* __s, size_t __n, const char_type& __a);
|
||||
|
||||
static char_type*
|
||||
move(char_type* __s1, const char_type* __s2, size_t __n);
|
||||
|
||||
static char_type*
|
||||
copy(char_type* __s1, const char_type* __s2, size_t __n)
|
||||
{ return static_cast<char_type*>(memcpy(__s1, __s2, __n)); }
|
||||
|
||||
static char_type*
|
||||
assign(char_type* __s, size_t __n, char_type __a);
|
||||
|
||||
static char_type
|
||||
to_char_type(const int_type& __c);
|
||||
|
||||
static int_type
|
||||
to_int_type(const char_type& __c);
|
||||
|
||||
static bool
|
||||
eq_int_type(const int_type& __c1, const int_type& __c2);
|
||||
|
||||
static int_type
|
||||
eof();
|
||||
|
||||
static int_type
|
||||
not_eof(const int_type& __c);
|
||||
};
|
||||
}
|
||||
|
||||
void
|
||||
initialize_state(std::__enc_traits& state)
|
||||
{ state._M_init(); }
|
||||
|
||||
bool length_called = false;
|
||||
|
||||
class length_codecvt : public std::codecvt<unicode_t, char, std::__enc_traits>
|
||||
{
|
||||
typedef std::codecvt<unicode_t, char, std::__enc_traits> unicode_codecvt;
|
||||
|
||||
public:
|
||||
// DR75: type of first argument of do_length is state_type&
|
||||
virtual int do_length(state_type& state, const extern_type* from,
|
||||
const extern_type* end, std::size_t max) const
|
||||
{
|
||||
length_called = true;
|
||||
return unicode_codecvt::do_length(state, from, end, max);
|
||||
}
|
||||
};
|
||||
|
||||
// Partial specialization using __enc_traits.
|
||||
// codecvt<unicode_t, char, __enc_traits>
|
||||
// UNICODE - UCS2 (big endian)
|
||||
void test01()
|
||||
{
|
||||
using namespace std;
|
||||
typedef unicode_t int_type;
|
||||
typedef char ext_type;
|
||||
typedef __enc_traits enc_type;
|
||||
typedef codecvt<int_type, ext_type, enc_type> unicode_codecvt;
|
||||
|
||||
bool test __attribute__((unused)) = true;
|
||||
const ext_type* e_lit = "black pearl jasmine tea";
|
||||
int size = strlen(e_lit);
|
||||
|
||||
// construct a locale object with the specialized facet.
|
||||
locale loc(locale::classic(), new length_codecvt);
|
||||
// sanity check the constructed locale has the specialized facet.
|
||||
VERIFY( has_facet<unicode_codecvt>(loc) );
|
||||
const unicode_codecvt& cvt = use_facet<unicode_codecvt>(loc);
|
||||
|
||||
unicode_codecvt::state_type state04("UCS-2BE", "ISO-8859-15", 0xfeff, 0);
|
||||
initialize_state(state04);
|
||||
length_called = false;
|
||||
cvt.length(state04, e_lit, e_lit + size, 5);
|
||||
VERIFY( length_called );
|
||||
}
|
||||
#endif // _GLIBCXX_USE___ENC_TRAITS
|
||||
|
||||
int main ()
|
||||
{
|
||||
#if _GLIBCXX_USE___ENC_TRAITS
|
||||
test01();
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -1,300 +0,0 @@
|
|||
// 2000-08-22 Benjamin Kosnik <bkoz@cygnus.com>
|
||||
|
||||
// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 2, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License along
|
||||
// with this library; see the file COPYING. If not, write to the Free
|
||||
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
// USA.
|
||||
|
||||
// 22.2.1.5 - Template class codecvt [lib.locale.codecvt]
|
||||
#include <locale>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
#ifdef _GLIBCXX_USE___ENC_TRAITS
|
||||
|
||||
// Need some char_traits specializations for this to work.
|
||||
typedef unsigned short unicode_t;
|
||||
|
||||
namespace std
|
||||
{
|
||||
template<>
|
||||
struct char_traits<unicode_t>
|
||||
{
|
||||
typedef unicode_t char_type;
|
||||
// Unsigned as wint_t is unsigned.
|
||||
typedef unsigned long int_type;
|
||||
typedef streampos pos_type;
|
||||
typedef streamoff off_type;
|
||||
typedef mbstate_t state_type;
|
||||
|
||||
static void
|
||||
assign(char_type& __c1, const char_type& __c2);
|
||||
|
||||
static bool
|
||||
eq(const char_type& __c1, const char_type& __c2);
|
||||
|
||||
static bool
|
||||
lt(const char_type& __c1, const char_type& __c2);
|
||||
|
||||
static int
|
||||
compare(const char_type* __s1, const char_type* __s2, size_t __n)
|
||||
{ return memcmp(__s1, __s2, __n); }
|
||||
|
||||
static size_t
|
||||
length(const char_type* __s);
|
||||
|
||||
static const char_type*
|
||||
find(const char_type* __s, size_t __n, const char_type& __a);
|
||||
|
||||
static char_type*
|
||||
move(char_type* __s1, const char_type* __s2, size_t __n);
|
||||
|
||||
static char_type*
|
||||
copy(char_type* __s1, const char_type* __s2, size_t __n)
|
||||
{ return static_cast<char_type*>(memcpy(__s1, __s2, __n)); }
|
||||
|
||||
static char_type*
|
||||
assign(char_type* __s, size_t __n, char_type __a);
|
||||
|
||||
static char_type
|
||||
to_char_type(const int_type& __c);
|
||||
|
||||
static int_type
|
||||
to_int_type(const char_type& __c);
|
||||
|
||||
static bool
|
||||
eq_int_type(const int_type& __c1, const int_type& __c2);
|
||||
|
||||
static int_type
|
||||
eof();
|
||||
|
||||
static int_type
|
||||
not_eof(const int_type& __c);
|
||||
};
|
||||
}
|
||||
|
||||
/*
|
||||
> how do I check that these conversions are correct?
|
||||
Very easy. Since all the characters are from ASCII you simply
|
||||
zero-extend the values.
|
||||
|
||||
drepper$ echo 'black pearl jasmine tea' | od -t x1
|
||||
0000000 62 6c 61 63 6b 20 70 65 61 72 6c 20 6a 61 73 6d
|
||||
0000020 69 6e 65 20 74 65 61 0a
|
||||
|
||||
So the UCS-2 string is
|
||||
|
||||
0x0062, 0x006c, 0x0061, ...
|
||||
|
||||
You get the idea. With iconv() you have to take care of the
|
||||
byte-order, though. UCS-2 can mean little- or big endian. Looking at
|
||||
your result
|
||||
|
||||
> $9 = 25856
|
||||
|
||||
it shows that the other byte-order is used (25856 == 0x6500).
|
||||
*/
|
||||
|
||||
|
||||
void
|
||||
initialize_state(std::__enc_traits& state)
|
||||
{ state._M_init(); }
|
||||
|
||||
// Partial specialization using __enc_traits.
|
||||
// codecvt<unicode_t, char, __enc_traits>
|
||||
// UNICODE - UCS2 (big endian)
|
||||
void test01()
|
||||
{
|
||||
using namespace std;
|
||||
typedef codecvt_base::result result;
|
||||
typedef unicode_t int_type;
|
||||
typedef char ext_type;
|
||||
typedef __enc_traits enc_type;
|
||||
typedef codecvt<int_type, ext_type, enc_type> unicode_codecvt;
|
||||
typedef char_traits<int_type> int_traits;
|
||||
typedef char_traits<ext_type> ext_traits;
|
||||
|
||||
bool test __attribute__((unused)) = true;
|
||||
const ext_type* e_lit = "black pearl jasmine tea";
|
||||
int size = strlen(e_lit);
|
||||
|
||||
char i_lit_base[50] __attribute__((aligned(__alignof__(int_type)))) =
|
||||
{
|
||||
0x00, 0x62, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x63, 0x00, 0x6b, 0x00, 0x20,
|
||||
0x00, 0x70, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6c, 0x00, 0x20,
|
||||
0x00, 0x6a, 0x00, 0x61, 0x00, 0x73, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e,
|
||||
0x00, 0x65, 0x00, 0x20, 0x00, 0x74, 0x00, 0x65, 0x00, 0x61, 0x00, 0xa0
|
||||
};
|
||||
const int_type* i_lit = reinterpret_cast<int_type*>(i_lit_base);
|
||||
|
||||
const ext_type* efrom_next;
|
||||
const int_type* ifrom_next;
|
||||
ext_type* e_arr = new ext_type[size + 1];
|
||||
ext_type* eto_next;
|
||||
int_type* i_arr = new int_type[size + 1];
|
||||
int_type* ito_next;
|
||||
|
||||
// construct a locale object with the specialized facet.
|
||||
locale loc(locale::classic(), new unicode_codecvt);
|
||||
// sanity check the constructed locale has the specialized facet.
|
||||
VERIFY( has_facet<unicode_codecvt>(loc) );
|
||||
const unicode_codecvt& cvt = use_facet<unicode_codecvt>(loc);
|
||||
|
||||
// in
|
||||
// unicode_codecvt::state_type state01("UCS-2BE", "ISO-8859-15", 0xfeff, 0);
|
||||
unicode_codecvt::state_type state01("UCS-2BE", "ISO-8859-15", 0, 0);
|
||||
initialize_state(state01);
|
||||
// internal encoding is bigger because of bom
|
||||
result r1 = cvt.in(state01, e_lit, e_lit + size, efrom_next,
|
||||
i_arr, i_arr + size + 1, ito_next);
|
||||
VERIFY( r1 == codecvt_base::ok );
|
||||
VERIFY( !int_traits::compare(i_arr, i_lit, size) );
|
||||
VERIFY( efrom_next == e_lit + size );
|
||||
VERIFY( ito_next == i_arr + size );
|
||||
|
||||
// out
|
||||
unicode_codecvt::state_type state02("UCS-2BE", "ISO-8859-15", 0, 0);
|
||||
initialize_state(state02);
|
||||
result r2 = cvt.out(state02, i_lit, i_lit + size, ifrom_next,
|
||||
e_arr, e_arr + size, eto_next);
|
||||
VERIFY( r2 == codecvt_base::ok );
|
||||
VERIFY( !ext_traits::compare(e_arr, e_lit, size) );
|
||||
VERIFY( ifrom_next == i_lit + size );
|
||||
VERIFY( eto_next == e_arr + size );
|
||||
|
||||
// unshift
|
||||
ext_traits::copy(e_arr, e_lit, size);
|
||||
unicode_codecvt::state_type state03("UCS-2BE", "ISO-8859-15", 0, 0);
|
||||
initialize_state(state03);
|
||||
result r3 = cvt.unshift(state03, e_arr, e_arr + size, eto_next);
|
||||
VERIFY( r3 == codecvt_base::noconv );
|
||||
VERIFY( !ext_traits::compare(e_arr, e_lit, size) );
|
||||
VERIFY( eto_next == e_arr );
|
||||
|
||||
int i = cvt.encoding();
|
||||
VERIFY( i == 2 ); // Target-dependent.
|
||||
|
||||
VERIFY( !cvt.always_noconv() );
|
||||
|
||||
unicode_codecvt::state_type state04("UCS-2BE", "ISO-8859-15", 0, 0);
|
||||
initialize_state(state04);
|
||||
int j = cvt.length(state03, e_lit, e_lit + size, 5);
|
||||
VERIFY( j == 5 );
|
||||
|
||||
int k = cvt.max_length();
|
||||
VERIFY( k == 1 );
|
||||
|
||||
delete [] e_arr;
|
||||
delete [] i_arr;
|
||||
}
|
||||
|
||||
// Partial specialization using __enc_traits.
|
||||
// codecvt<unicode_t, char, __enc_traits>
|
||||
// UNICODE - UCS2 (little endian)
|
||||
void test02()
|
||||
{
|
||||
using namespace std;
|
||||
typedef codecvt_base::result result;
|
||||
typedef unsigned short unicode_t;
|
||||
typedef unicode_t int_type;
|
||||
typedef char ext_type;
|
||||
typedef __enc_traits enc_type;
|
||||
typedef codecvt<int_type, ext_type, enc_type> unicode_codecvt;
|
||||
typedef char_traits<int_type> int_traits;
|
||||
typedef char_traits<ext_type> ext_traits;
|
||||
|
||||
bool test __attribute__((unused)) = true;
|
||||
const ext_type* e_lit = "black pearl jasmine tea";
|
||||
int size = strlen(e_lit);
|
||||
|
||||
char i_lit_base[50] __attribute__((aligned(__alignof__(int_type)))) =
|
||||
{
|
||||
0x62, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x63, 0x00, 0x6b, 0x00, 0x20, 0x00,
|
||||
0x70, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6c, 0x00, 0x20, 0x00,
|
||||
0x6a, 0x00, 0x61, 0x00, 0x73, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e, 0x00,
|
||||
0x65, 0x00, 0x20, 0x00, 0x74, 0x00, 0x65, 0x00, 0x61, 0x00, 0xa0, 0x00
|
||||
};
|
||||
const int_type* i_lit = reinterpret_cast<int_type*>(i_lit_base);
|
||||
|
||||
const ext_type* efrom_next;
|
||||
const int_type* ifrom_next;
|
||||
ext_type* e_arr = new ext_type[size + 1];
|
||||
ext_type* eto_next;
|
||||
int_type* i_arr = new int_type[size + 1];
|
||||
int_type* ito_next;
|
||||
|
||||
// construct a locale object with the specialized facet.
|
||||
locale loc(locale::classic(), new unicode_codecvt);
|
||||
// sanity check the constructed locale has the specialized facet.
|
||||
VERIFY( has_facet<unicode_codecvt>(loc) );
|
||||
const unicode_codecvt& cvt = use_facet<unicode_codecvt>(loc);
|
||||
|
||||
// in
|
||||
unicode_codecvt::state_type state01("UCS-2LE", "ISO-8859-15", 0, 0);
|
||||
initialize_state(state01);
|
||||
// internal encoding is bigger because of bom
|
||||
result r1 = cvt.in(state01, e_lit, e_lit + size, efrom_next,
|
||||
i_arr, i_arr + size + 1, ito_next);
|
||||
VERIFY( r1 == codecvt_base::ok );
|
||||
VERIFY( !int_traits::compare(i_arr, i_lit, size) );
|
||||
VERIFY( efrom_next == e_lit + size );
|
||||
VERIFY( ito_next == i_arr + size );
|
||||
|
||||
// out
|
||||
unicode_codecvt::state_type state02("UCS-2LE", "ISO-8859-15", 0, 0);
|
||||
initialize_state(state02);
|
||||
result r2 = cvt.out(state02, i_lit, i_lit + size, ifrom_next,
|
||||
e_arr, e_arr + size, eto_next);
|
||||
VERIFY( r2 == codecvt_base::ok );
|
||||
VERIFY( !ext_traits::compare(e_arr, e_lit, size) );
|
||||
VERIFY( ifrom_next == i_lit + size );
|
||||
VERIFY( eto_next == e_arr + size );
|
||||
|
||||
// unshift
|
||||
ext_traits::copy(e_arr, e_lit, size);
|
||||
unicode_codecvt::state_type state03("UCS-2LE", "ISO-8859-15", 0, 0);
|
||||
initialize_state(state03);
|
||||
result r3 = cvt.unshift(state03, e_arr, e_arr + size, eto_next);
|
||||
VERIFY( r3 == codecvt_base::noconv );
|
||||
VERIFY( !ext_traits::compare(e_arr, e_lit, size) );
|
||||
VERIFY( eto_next == e_arr );
|
||||
|
||||
int i = cvt.encoding();
|
||||
VERIFY( i == 2 ); // Target-dependent.
|
||||
|
||||
VERIFY( !cvt.always_noconv() );
|
||||
|
||||
unicode_codecvt::state_type state04("UCS-2LE", "ISO-8859-15", 0, 0);
|
||||
initialize_state(state04);
|
||||
int j = cvt.length(state03, e_lit, e_lit + size, 5);
|
||||
VERIFY( j == 5 );
|
||||
|
||||
int k = cvt.max_length();
|
||||
VERIFY( k == 1 );
|
||||
|
||||
delete [] e_arr;
|
||||
delete [] i_arr;
|
||||
}
|
||||
|
||||
#endif // _GLIBCXX_USE___ENC_TRAITS
|
||||
|
||||
int main ()
|
||||
{
|
||||
#if _GLIBCXX_USE___ENC_TRAITS
|
||||
test01();
|
||||
test02();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,81 @@
|
|||
// { dg-require-iconv "ISO-8859-1" }
|
||||
|
||||
// Copyright (C) 2006, 2007 Free Software Foundation
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 2, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License along
|
||||
// with this library; see the file COPYING. If not, write to the Free
|
||||
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
// USA.
|
||||
|
||||
// 22.1.1.2 locale constructors and destructors [lib.locale.cons]
|
||||
|
||||
#include <cwchar> // for mbstate_t
|
||||
#include <locale>
|
||||
#include <stdexcept>
|
||||
#include <testsuite_hooks.h>
|
||||
#include <ext/codecvt_specializations.h>
|
||||
|
||||
typedef std::codecvt<char, char, std::mbstate_t> c_codecvt;
|
||||
|
||||
#ifdef _GLIBCXX_USE_WCHAR_T
|
||||
typedef std::codecvt<wchar_t, char, std::mbstate_t> w_codecvt;
|
||||
#endif
|
||||
|
||||
class gnu_facet: public std::locale::facet
|
||||
{
|
||||
public:
|
||||
static std::locale::id id;
|
||||
};
|
||||
|
||||
std::locale::id gnu_facet::id;
|
||||
|
||||
void test01()
|
||||
{
|
||||
using namespace std;
|
||||
typedef unsigned short int_type;
|
||||
typedef char ext_type;
|
||||
typedef __gnu_cxx::encoding_state state_type;
|
||||
typedef codecvt<int_type, ext_type, state_type> unicode_codecvt;
|
||||
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
// unicode_codecvt
|
||||
locale loc01(locale::classic());
|
||||
locale loc13(locale::classic(), new unicode_codecvt);
|
||||
VERIFY( loc01 != loc13 );
|
||||
VERIFY( loc13.name() == "*" );
|
||||
try
|
||||
{
|
||||
VERIFY( has_facet<c_codecvt>(loc13) );
|
||||
#ifdef _GLIBCXX_USE_WCHAR_T
|
||||
VERIFY( has_facet<w_codecvt>(loc13) );
|
||||
#endif
|
||||
VERIFY( has_facet<unicode_codecvt>(loc13) );
|
||||
}
|
||||
catch(...)
|
||||
{ VERIFY( false ); }
|
||||
|
||||
try
|
||||
{ use_facet<gnu_facet>(loc13); }
|
||||
catch(bad_cast& obj)
|
||||
{ VERIFY( true ); }
|
||||
catch(...)
|
||||
{ VERIFY( false ); }
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
|
@ -1,142 +0,0 @@
|
|||
// Copyright (C) 2006 Free Software Foundation
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 2, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License along
|
||||
// with this library; see the file COPYING. If not, write to the Free
|
||||
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
// USA.
|
||||
|
||||
// 22.1.1.2 locale constructors and destructors [lib.locale.cons]
|
||||
|
||||
#include <cwchar> // for mbstate_t
|
||||
#include <locale>
|
||||
#include <stdexcept>
|
||||
#include <testsuite_hooks.h>
|
||||
|
||||
#if _GLIBCXX_USE___ENC_TRAITS
|
||||
typedef std::codecvt<char, char, std::mbstate_t> c_codecvt;
|
||||
|
||||
#ifdef _GLIBCXX_USE_WCHAR_T
|
||||
typedef std::codecvt<wchar_t, char, std::mbstate_t> w_codecvt;
|
||||
#endif
|
||||
|
||||
class gnu_facet: public std::locale::facet
|
||||
{
|
||||
public:
|
||||
static std::locale::id id;
|
||||
};
|
||||
|
||||
std::locale::id gnu_facet::id;
|
||||
|
||||
// Need some char_traits specializations for this to work.
|
||||
typedef unsigned short unicode_t;
|
||||
|
||||
namespace std
|
||||
{
|
||||
template<>
|
||||
struct char_traits<unicode_t>
|
||||
{
|
||||
typedef unicode_t char_type;
|
||||
// Unsigned as wint_t is unsigned.
|
||||
typedef unsigned long int_type;
|
||||
typedef streampos pos_type;
|
||||
typedef streamoff off_type;
|
||||
typedef mbstate_t state_type;
|
||||
|
||||
static void
|
||||
assign(char_type& __c1, const char_type& __c2);
|
||||
|
||||
static bool
|
||||
eq(const char_type& __c1, const char_type& __c2);
|
||||
|
||||
static bool
|
||||
lt(const char_type& __c1, const char_type& __c2);
|
||||
|
||||
static int
|
||||
compare(const char_type* __s1, const char_type* __s2, size_t __n)
|
||||
{ return memcmp(__s1, __s2, __n); }
|
||||
|
||||
static size_t
|
||||
length(const char_type* __s);
|
||||
|
||||
static const char_type*
|
||||
find(const char_type* __s, size_t __n, const char_type& __a);
|
||||
|
||||
static char_type*
|
||||
move(char_type* __s1, const char_type* __s2, size_t __n);
|
||||
|
||||
static char_type*
|
||||
copy(char_type* __s1, const char_type* __s2, size_t __n)
|
||||
{ return static_cast<char_type*>(memcpy(__s1, __s2, __n)); }
|
||||
|
||||
static char_type*
|
||||
assign(char_type* __s, size_t __n, char_type __a);
|
||||
|
||||
static char_type
|
||||
to_char_type(const int_type& __c);
|
||||
|
||||
static int_type
|
||||
to_int_type(const char_type& __c);
|
||||
|
||||
static bool
|
||||
eq_int_type(const int_type& __c1, const int_type& __c2);
|
||||
|
||||
static int_type
|
||||
eof();
|
||||
|
||||
static int_type
|
||||
not_eof(const int_type& __c);
|
||||
};
|
||||
}
|
||||
|
||||
void test01()
|
||||
{
|
||||
using namespace std;
|
||||
typedef unicode_t int_type;
|
||||
typedef char ext_type;
|
||||
typedef __enc_traits enc_type;
|
||||
typedef codecvt<int_type, ext_type, enc_type> unicode_codecvt;
|
||||
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
||||
// unicode_codecvt
|
||||
locale loc13(locale::classic(), new unicode_codecvt);
|
||||
VERIFY( loc01 != loc13 );
|
||||
VERIFY( loc13.name() == "*" );
|
||||
try
|
||||
{
|
||||
VERIFY( has_facet<c_codecvt>(loc13) );
|
||||
#ifdef _GLIBCXX_USE_WCHAR_T
|
||||
VERIFY( has_facet<w_codecvt>(loc13) );
|
||||
#endif
|
||||
VERIFY( has_facet<unicode_codecvt>(loc13) );
|
||||
}
|
||||
catch(...)
|
||||
{ VERIFY( false ); }
|
||||
|
||||
try
|
||||
{ use_facet<gnu_facet>(loc13); }
|
||||
catch(bad_cast& obj)
|
||||
{ VERIFY( true ); }
|
||||
catch(...)
|
||||
{ VERIFY( false ); }
|
||||
}
|
||||
#endif // _GLIBCXX_USE___ENC_TRAITS
|
||||
|
||||
int main()
|
||||
{
|
||||
#if _GLIBCXX_USE___ENC_TRAITS
|
||||
test01();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
|
@ -41,7 +41,11 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
|
|||
subdir = testsuite
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
am__aclocal_m4_deps = $(top_srcdir)/../config/enable.m4 \
|
||||
$(top_srcdir)/../config/iconv.m4 \
|
||||
$(top_srcdir)/../config/lead-dot.m4 \
|
||||
$(top_srcdir)/../config/lib-ld.m4 \
|
||||
$(top_srcdir)/../config/lib-link.m4 \
|
||||
$(top_srcdir)/../config/lib-prefix.m4 \
|
||||
$(top_srcdir)/../config/multi.m4 \
|
||||
$(top_srcdir)/../config/no-executables.m4 \
|
||||
$(top_srcdir)/../config/unwind_ipinfo.m4 \
|
||||
|
@ -143,6 +147,7 @@ LIBS = @LIBS@
|
|||
LIBSUPCXX_PICFLAGS = @LIBSUPCXX_PICFLAGS@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
LN_S = @LN_S@
|
||||
LTLIBICONV = @LTLIBICONV@
|
||||
LTLIBOBJS = @LTLIBOBJS@
|
||||
MAINT = @MAINT@
|
||||
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
// { dg-require-iconv "UCS-2BE" }
|
||||
// { dg-require-iconv "ISO-8859-15" }
|
||||
// 2003-02-06 Petur Runolfsson <peturr02@ru.is>
|
||||
|
||||
// Copyright (C) 2003, 2007 Free Software Foundation
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 2, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License along
|
||||
// with this library; see the file COPYING. If not, write to the Free
|
||||
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
// USA.
|
||||
|
||||
// 22.2.1.5 - Template class codecvt [lib.locale.codecvt]
|
||||
|
||||
#include <locale>
|
||||
#include <testsuite_hooks.h>
|
||||
#include <ext/codecvt_specializations.h>
|
||||
|
||||
// Partial specialization using encoding_state
|
||||
// codecvt<unicode_t, char, encoding_state>
|
||||
// UNICODE - UCS2 (big endian)
|
||||
void test01()
|
||||
{
|
||||
using namespace std;
|
||||
typedef unsigned short int_type;
|
||||
typedef char ext_type;
|
||||
typedef __gnu_cxx::encoding_state state_type;
|
||||
typedef codecvt<int_type, ext_type, state_type> unicode_codecvt;
|
||||
|
||||
bool test __attribute__((unused)) = true;
|
||||
const ext_type* e_lit = "black pearl jasmine tea";
|
||||
int size = strlen(e_lit);
|
||||
|
||||
// construct a locale object with the specialized facet.
|
||||
locale loc(locale::classic(), new unicode_codecvt);
|
||||
// sanity check the constructed locale has the specialized facet.
|
||||
VERIFY( has_facet<unicode_codecvt>(loc) );
|
||||
const unicode_codecvt& cvt = use_facet<unicode_codecvt>(loc);
|
||||
|
||||
unicode_codecvt::state_type state04("UCS-2BE", "ISO-8859-15", 0xfeff, 0);
|
||||
cvt.length(state04, e_lit, e_lit + size, 5);
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,140 @@
|
|||
// { dg-require-iconv "UCS-2BE" }
|
||||
// { dg-require-iconv "ISO-8859-15" }
|
||||
|
||||
// 2000-08-22 Benjamin Kosnik <bkoz@cygnus.com>
|
||||
|
||||
// Copyright (C) 2000, 2001, 2002, 2003, 2007 Free Software Foundation
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 2, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License along
|
||||
// with this library; see the file COPYING. If not, write to the Free
|
||||
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
// USA.
|
||||
|
||||
// 22.2.1.5 - Template class codecvt [lib.locale.codecvt]
|
||||
#include <locale>
|
||||
#include <testsuite_hooks.h>
|
||||
#include <ext/codecvt_specializations.h>
|
||||
|
||||
/*
|
||||
> how do I check that these conversions are correct?
|
||||
Very easy. Since all the characters are from ASCII you simply
|
||||
zero-extend the values.
|
||||
|
||||
drepper$ echo 'black pearl jasmine tea' | od -t x1
|
||||
0000000 62 6c 61 63 6b 20 70 65 61 72 6c 20 6a 61 73 6d
|
||||
0000020 69 6e 65 20 74 65 61 0a
|
||||
|
||||
So the UCS-2 string is
|
||||
|
||||
0x0062, 0x006c, 0x0061, ...
|
||||
|
||||
You get the idea. With iconv() you have to take care of the
|
||||
byte-order, though. UCS-2 can mean little- or big endian. Looking at
|
||||
your result
|
||||
|
||||
> $9 = 25856
|
||||
|
||||
it shows that the other byte-order is used (25856 == 0x6500).
|
||||
*/
|
||||
|
||||
// Partial specialization using encoding_state.
|
||||
// codecvt<unicode_t, char, encoding_state>
|
||||
// UNICODE - UCS2 (big endian)
|
||||
void test01()
|
||||
{
|
||||
using namespace std;
|
||||
typedef codecvt_base::result result;
|
||||
typedef unsigned short int_type;
|
||||
typedef char ext_type;
|
||||
typedef __gnu_cxx::encoding_state state_type;
|
||||
typedef codecvt<int_type, ext_type, state_type> unicode_codecvt;
|
||||
typedef char_traits<int_type> int_traits;
|
||||
typedef char_traits<ext_type> ext_traits;
|
||||
|
||||
bool test __attribute__((unused)) = true;
|
||||
const ext_type* e_lit = "black pearl jasmine tea";
|
||||
int size = strlen(e_lit);
|
||||
|
||||
char i_lit_base[50] __attribute__((aligned(__alignof__(int_type)))) =
|
||||
{
|
||||
0x00, 0x62, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x63, 0x00, 0x6b, 0x00, 0x20,
|
||||
0x00, 0x70, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6c, 0x00, 0x20,
|
||||
0x00, 0x6a, 0x00, 0x61, 0x00, 0x73, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e,
|
||||
0x00, 0x65, 0x00, 0x20, 0x00, 0x74, 0x00, 0x65, 0x00, 0x61, 0x00, 0xa0
|
||||
};
|
||||
const int_type* i_lit = reinterpret_cast<int_type*>(i_lit_base);
|
||||
|
||||
const ext_type* efrom_next;
|
||||
const int_type* ifrom_next;
|
||||
ext_type* e_arr = new ext_type[size + 1];
|
||||
ext_type* eto_next;
|
||||
int_type* i_arr = new int_type[size + 1];
|
||||
int_type* ito_next;
|
||||
|
||||
// construct a locale object with the specialized facet.
|
||||
locale loc(locale::classic(), new unicode_codecvt);
|
||||
// sanity check the constructed locale has the specialized facet.
|
||||
VERIFY( has_facet<unicode_codecvt>(loc) );
|
||||
const unicode_codecvt& cvt = use_facet<unicode_codecvt>(loc);
|
||||
|
||||
// in
|
||||
// unicode_codecvt::state_type state01("UCS-2BE", "ISO-8859-15", 0xfeff, 0);
|
||||
unicode_codecvt::state_type state01("UCS-2BE", "ISO-8859-15", 0, 0);
|
||||
|
||||
// internal encoding is bigger because of bom
|
||||
result r1 = cvt.in(state01, e_lit, e_lit + size, efrom_next,
|
||||
i_arr, i_arr + size + 1, ito_next);
|
||||
VERIFY( r1 == codecvt_base::ok );
|
||||
VERIFY( !int_traits::compare(i_arr, i_lit, size) );
|
||||
VERIFY( efrom_next == e_lit + size );
|
||||
VERIFY( ito_next == i_arr + size );
|
||||
|
||||
// out
|
||||
unicode_codecvt::state_type state02("UCS-2BE", "ISO-8859-15", 0, 0);
|
||||
result r2 = cvt.out(state02, i_lit, i_lit + size, ifrom_next,
|
||||
e_arr, e_arr + size, eto_next);
|
||||
VERIFY( r2 == codecvt_base::ok );
|
||||
VERIFY( !ext_traits::compare(e_arr, e_lit, size) );
|
||||
VERIFY( ifrom_next == i_lit + size );
|
||||
VERIFY( eto_next == e_arr + size );
|
||||
|
||||
// unshift
|
||||
ext_traits::copy(e_arr, e_lit, size);
|
||||
unicode_codecvt::state_type state03("UCS-2BE", "ISO-8859-15", 0, 0);
|
||||
result r3 = cvt.unshift(state03, e_arr, e_arr + size, eto_next);
|
||||
VERIFY( r3 == codecvt_base::noconv );
|
||||
VERIFY( !ext_traits::compare(e_arr, e_lit, size) );
|
||||
VERIFY( eto_next == e_arr );
|
||||
|
||||
int i = cvt.encoding();
|
||||
VERIFY( i == 2 ); // Target-dependent.
|
||||
|
||||
VERIFY( !cvt.always_noconv() );
|
||||
|
||||
unicode_codecvt::state_type state04("UCS-2BE", "ISO-8859-15", 0, 0);
|
||||
int j = cvt.length(state03, e_lit, e_lit + size, 5);
|
||||
VERIFY( j == 5 );
|
||||
|
||||
int k = cvt.max_length();
|
||||
VERIFY( k == 1 );
|
||||
|
||||
delete [] e_arr;
|
||||
delete [] i_arr;
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,138 @@
|
|||
// { dg-require-iconv "UCS-2LE" }
|
||||
// { dg-require-iconv "ISO-8859-15" }
|
||||
|
||||
// 2000-08-22 Benjamin Kosnik <bkoz@cygnus.com>
|
||||
|
||||
// Copyright (C) 2000, 2001, 2002, 2003, 2007 Free Software Foundation
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 2, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// This library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License along
|
||||
// with this library; see the file COPYING. If not, write to the Free
|
||||
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
// USA.
|
||||
|
||||
// 22.2.1.5 - Template class codecvt [lib.locale.codecvt]
|
||||
#include <locale>
|
||||
#include <testsuite_hooks.h>
|
||||
#include <ext/codecvt_specializations.h>
|
||||
|
||||
/*
|
||||
> how do I check that these conversions are correct?
|
||||
Very easy. Since all the characters are from ASCII you simply
|
||||
zero-extend the values.
|
||||
|
||||
drepper$ echo 'black pearl jasmine tea' | od -t x1
|
||||
0000000 62 6c 61 63 6b 20 70 65 61 72 6c 20 6a 61 73 6d
|
||||
0000020 69 6e 65 20 74 65 61 0a
|
||||
|
||||
So the UCS-2 string is
|
||||
|
||||
0x0062, 0x006c, 0x0061, ...
|
||||
|
||||
You get the idea. With iconv() you have to take care of the
|
||||
byte-order, though. UCS-2 can mean little- or big endian. Looking at
|
||||
your result
|
||||
|
||||
> $9 = 25856
|
||||
|
||||
it shows that the other byte-order is used (25856 == 0x6500).
|
||||
*/
|
||||
|
||||
// Partial specialization using encoding_state.
|
||||
// codecvt<unicode_t, char, encoding_state>
|
||||
// UNICODE - UCS2 (little endian)
|
||||
void test02()
|
||||
{
|
||||
using namespace std;
|
||||
typedef codecvt_base::result result;
|
||||
typedef unsigned short int_type;
|
||||
typedef char ext_type;
|
||||
typedef __gnu_cxx::encoding_state state_type;
|
||||
typedef codecvt<int_type, ext_type, state_type> unicode_codecvt;
|
||||
typedef char_traits<int_type> int_traits;
|
||||
typedef char_traits<ext_type> ext_traits;
|
||||
|
||||
bool test __attribute__((unused)) = true;
|
||||
const ext_type* e_lit = "black pearl jasmine tea";
|
||||
int size = strlen(e_lit);
|
||||
|
||||
char i_lit_base[50] __attribute__((aligned(__alignof__(int_type)))) =
|
||||
{
|
||||
0x62, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x63, 0x00, 0x6b, 0x00, 0x20, 0x00,
|
||||
0x70, 0x00, 0x65, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6c, 0x00, 0x20, 0x00,
|
||||
0x6a, 0x00, 0x61, 0x00, 0x73, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e, 0x00,
|
||||
0x65, 0x00, 0x20, 0x00, 0x74, 0x00, 0x65, 0x00, 0x61, 0x00, 0xa0, 0x00
|
||||
};
|
||||
const int_type* i_lit = reinterpret_cast<int_type*>(i_lit_base);
|
||||
|
||||
const ext_type* efrom_next;
|
||||
const int_type* ifrom_next;
|
||||
ext_type* e_arr = new ext_type[size + 1];
|
||||
ext_type* eto_next;
|
||||
int_type* i_arr = new int_type[size + 1];
|
||||
int_type* ito_next;
|
||||
|
||||
// construct a locale object with the specialized facet.
|
||||
locale loc(locale::classic(), new unicode_codecvt);
|
||||
// sanity check the constructed locale has the specialized facet.
|
||||
VERIFY( has_facet<unicode_codecvt>(loc) );
|
||||
const unicode_codecvt& cvt = use_facet<unicode_codecvt>(loc);
|
||||
|
||||
// in
|
||||
unicode_codecvt::state_type state01("UCS-2LE", "ISO-8859-15", 0, 0);
|
||||
// internal encoding is bigger because of bom
|
||||
result r1 = cvt.in(state01, e_lit, e_lit + size, efrom_next,
|
||||
i_arr, i_arr + size + 1, ito_next);
|
||||
VERIFY( r1 == codecvt_base::ok );
|
||||
VERIFY( !int_traits::compare(i_arr, i_lit, size) );
|
||||
VERIFY( efrom_next == e_lit + size );
|
||||
VERIFY( ito_next == i_arr + size );
|
||||
|
||||
// out
|
||||
unicode_codecvt::state_type state02("UCS-2LE", "ISO-8859-15", 0, 0);
|
||||
result r2 = cvt.out(state02, i_lit, i_lit + size, ifrom_next,
|
||||
e_arr, e_arr + size, eto_next);
|
||||
VERIFY( r2 == codecvt_base::ok );
|
||||
VERIFY( !ext_traits::compare(e_arr, e_lit, size) );
|
||||
VERIFY( ifrom_next == i_lit + size );
|
||||
VERIFY( eto_next == e_arr + size );
|
||||
|
||||
// unshift
|
||||
ext_traits::copy(e_arr, e_lit, size);
|
||||
unicode_codecvt::state_type state03("UCS-2LE", "ISO-8859-15", 0, 0);
|
||||
result r3 = cvt.unshift(state03, e_arr, e_arr + size, eto_next);
|
||||
VERIFY( r3 == codecvt_base::noconv );
|
||||
VERIFY( !ext_traits::compare(e_arr, e_lit, size) );
|
||||
VERIFY( eto_next == e_arr );
|
||||
|
||||
int i = cvt.encoding();
|
||||
VERIFY( i == 2 ); // Target-dependent.
|
||||
|
||||
VERIFY( !cvt.always_noconv() );
|
||||
|
||||
unicode_codecvt::state_type state04("UCS-2LE", "ISO-8859-15", 0, 0);
|
||||
int j = cvt.length(state03, e_lit, e_lit + size, 5);
|
||||
VERIFY( j == 5 );
|
||||
|
||||
int k = cvt.max_length();
|
||||
VERIFY( k == 1 );
|
||||
|
||||
delete [] e_arr;
|
||||
delete [] i_arr;
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
test02();
|
||||
return 0;
|
||||
}
|
|
@ -1,6 +1,9 @@
|
|||
// { dg-require-iconv "UCS-2BE" }
|
||||
// { dg-require-iconv "UCS-4BE" }
|
||||
|
||||
// 2000-08-23 Benjamin Kosnik <bkoz@cygnus.com>
|
||||
|
||||
// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation
|
||||
// Copyright (C) 2000, 2001, 2002, 2003, 2007 Free Software Foundation
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
|
@ -22,84 +25,18 @@
|
|||
|
||||
#include <locale>
|
||||
#include <testsuite_hooks.h>
|
||||
#include <ext/codecvt_specializations.h>
|
||||
|
||||
#ifdef _GLIBCXX_USE___ENC_TRAITS
|
||||
|
||||
// Need some char_traits specializations for this to work.
|
||||
typedef unsigned short unicode_t;
|
||||
|
||||
namespace std
|
||||
{
|
||||
template<>
|
||||
struct char_traits<unicode_t>
|
||||
{
|
||||
typedef unicode_t char_type;
|
||||
// Unsigned as wint_t is unsigned.
|
||||
typedef unsigned long int_type;
|
||||
typedef streampos pos_type;
|
||||
typedef streamoff off_type;
|
||||
typedef mbstate_t state_type;
|
||||
|
||||
static void
|
||||
assign(char_type& __c1, const char_type& __c2);
|
||||
|
||||
static bool
|
||||
eq(const char_type& __c1, const char_type& __c2);
|
||||
|
||||
static bool
|
||||
lt(const char_type& __c1, const char_type& __c2);
|
||||
|
||||
static int
|
||||
compare(const char_type* __s1, const char_type* __s2, size_t __n)
|
||||
{ return memcmp(__s1, __s2, __n); }
|
||||
|
||||
static size_t
|
||||
length(const char_type* __s);
|
||||
|
||||
static const char_type*
|
||||
find(const char_type* __s, size_t __n, const char_type& __a);
|
||||
|
||||
static char_type*
|
||||
move(char_type* __s1, const char_type* __s2, size_t __n);
|
||||
|
||||
static char_type*
|
||||
copy(char_type* __s1, const char_type* __s2, size_t __n)
|
||||
{ return static_cast<char_type*>(memcpy(__s1, __s2, __n)); }
|
||||
|
||||
static char_type*
|
||||
assign(char_type* __s, size_t __n, char_type __a);
|
||||
|
||||
static char_type
|
||||
to_char_type(const int_type& __c);
|
||||
|
||||
static int_type
|
||||
to_int_type(const char_type& __c);
|
||||
|
||||
static bool
|
||||
eq_int_type(const int_type& __c1, const int_type& __c2);
|
||||
|
||||
static int_type
|
||||
eof();
|
||||
|
||||
static int_type
|
||||
not_eof(const int_type& __c);
|
||||
};
|
||||
}
|
||||
|
||||
void
|
||||
initialize_state(std::__enc_traits& state)
|
||||
{ state._M_init(); }
|
||||
|
||||
// Partial specialization using __enc_traits.
|
||||
// codecvt<unicode_t, wchar_t, __enc_traits>
|
||||
// Partial specialization using encoding_state.
|
||||
// codecvt<unicode_t, wchar_t, encoding_state>
|
||||
void test01()
|
||||
{
|
||||
using namespace std;
|
||||
typedef codecvt_base::result result;
|
||||
typedef unicode_t int_type;
|
||||
typedef unsigned short int_type;
|
||||
typedef wchar_t ext_type;
|
||||
typedef __enc_traits enc_type;
|
||||
typedef codecvt<int_type, ext_type, enc_type> unicode_codecvt;
|
||||
typedef __gnu_cxx::encoding_state state_type;
|
||||
typedef codecvt<int_type, ext_type, state_type> unicode_codecvt;
|
||||
typedef char_traits<int_type> int_traits;
|
||||
typedef char_traits<ext_type> ext_traits;
|
||||
|
||||
|
@ -138,12 +75,11 @@ void test01()
|
|||
locale loc(locale::classic(), new unicode_codecvt);
|
||||
// sanity check the constructed locale has the specialized facet.
|
||||
VERIFY( has_facet<unicode_codecvt>(loc) );
|
||||
const unicode_codecvt& cvt = use_facet<unicode_codecvt>(loc);
|
||||
const unicode_codecvt& cvt = use_facet<unicode_codecvt>(loc);
|
||||
|
||||
// in
|
||||
// unicode_codecvt::state_type state01("UCS-2BE", "UCS-4BE", 0xfeff, 0);
|
||||
unicode_codecvt::state_type state01("UCS-2BE", "UCS-4BE", 0, 0);
|
||||
initialize_state(state01);
|
||||
result r1 = cvt.in(state01, e_lit, e_lit + size, efrom_next,
|
||||
i_arr, i_arr + size + 1, ito_next);
|
||||
VERIFY( r1 == codecvt_base::ok );
|
||||
|
@ -153,7 +89,6 @@ void test01()
|
|||
|
||||
// out
|
||||
unicode_codecvt::state_type state02("UCS-2BE", "UCS-4BE", 0, 0);
|
||||
initialize_state(state02);
|
||||
result r2 = cvt.out(state02, i_lit, i_lit + size, ifrom_next,
|
||||
e_arr, e_arr + size, eto_next);
|
||||
VERIFY( r2 == codecvt_base::ok ); // XXX?
|
||||
|
@ -164,7 +99,6 @@ void test01()
|
|||
// unshift
|
||||
ext_traits::copy(e_arr, e_lit, size);
|
||||
unicode_codecvt::state_type state03("UCS-2BE", "UCS-4BE", 0, 0);
|
||||
initialize_state(state03);
|
||||
result r3 = cvt.unshift(state03, e_arr, e_arr + size, eto_next);
|
||||
VERIFY( r3 == codecvt_base::noconv );
|
||||
VERIFY( !ext_traits::compare(e_arr, e_lit, size) );
|
||||
|
@ -176,7 +110,6 @@ void test01()
|
|||
VERIFY( !cvt.always_noconv() );
|
||||
|
||||
unicode_codecvt::state_type state04("UCS-2BE", "UCS-4BE", 0, 0);
|
||||
initialize_state(state04);
|
||||
int j = cvt.length(state03, e_lit, e_lit + size, 5);
|
||||
VERIFY( j == 5 );
|
||||
|
||||
|
@ -186,13 +119,10 @@ void test01()
|
|||
delete [] e_arr;
|
||||
delete [] i_arr;
|
||||
}
|
||||
#endif // _GLIBCXX_USE___ENC_TRAITS
|
||||
|
||||
int main ()
|
||||
{
|
||||
#ifdef _GLIBCXX_USE___ENC_TRAITS
|
||||
test01();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1,4 +1,6 @@
|
|||
// Copyright (C) 2003, 2004, 2005 Free Software Foundation
|
||||
// { dg-require-iconv "ISO-8859-1" }
|
||||
|
||||
// Copyright (C) 2003, 2004, 2005, 2007 Free Software Foundation
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
|
@ -17,17 +19,14 @@
|
|||
// USA.
|
||||
|
||||
#include <testsuite_hooks.h>
|
||||
#ifdef _GLIBCXX_USE___ENC_TRAITS
|
||||
#include <ext/enc_filebuf.h>
|
||||
#endif
|
||||
|
||||
void test01()
|
||||
{
|
||||
#ifdef _GLIBCXX_USE___ENC_TRAITS
|
||||
using namespace std;
|
||||
typedef __enc_traits state_type;
|
||||
typedef char char_type;
|
||||
typedef __gnu_cxx::enc_filebuf<char_type> filebuf_type;
|
||||
typedef filebuf_type::state_type state_type;
|
||||
typedef codecvt<char_type, char, state_type> enc_codecvt;
|
||||
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
@ -47,7 +46,6 @@ void test01()
|
|||
catch(...)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
int main()
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
// Copyright (C) 2004 Free Software Foundation
|
||||
// { dg-require-iconv "ISO-8859-1" }
|
||||
|
||||
// Copyright (C) 2004, 2007 Free Software Foundation
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
|
@ -19,20 +21,20 @@
|
|||
#include <locale>
|
||||
#include <cstring>
|
||||
#include <testsuite_hooks.h>
|
||||
#ifdef _GLIBCXX_USE___ENC_TRAITS
|
||||
#include <ext/enc_filebuf.h>
|
||||
#endif
|
||||
|
||||
int main()
|
||||
{
|
||||
#ifdef _GLIBCXX_USE___ENC_TRAITS
|
||||
bool test __attribute__((unused)) = true;
|
||||
typedef char char_type;
|
||||
typedef __gnu_cxx::enc_filebuf<char_type> filebuf_type;
|
||||
typedef filebuf_type::state_type state_type;
|
||||
|
||||
const char* str = "Hello, world!\n";
|
||||
std::locale loc(std::locale::classic(),
|
||||
new std::codecvt<char, char, std::__enc_traits>());
|
||||
std::__enc_traits st("ISO-8859-1", "ISO-8859-1");
|
||||
__gnu_cxx::enc_filebuf<char> fb(st);
|
||||
new std::codecvt<char, char, __gnu_cxx::encoding_state>());
|
||||
state_type st("ISO-8859-1", "ISO-8859-1");
|
||||
filebuf_type fb(st);
|
||||
fb.pubimbue(loc);
|
||||
|
||||
fb.open("tmp_13598", std::ios_base::out);
|
||||
|
@ -42,7 +44,6 @@ int main()
|
|||
|
||||
VERIFY( n == std::strlen(str) );
|
||||
VERIFY( s == 0 );
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
// Copyright (C) 2003, 2004, 2005 Free Software Foundation
|
||||
// { dg-require-iconv "ISO-8859-1" }
|
||||
|
||||
// Copyright (C) 2003, 2004, 2005, 2007 Free Software Foundation
|
||||
//
|
||||
// This file is part of the GNU ISO C++ Library. This library is free
|
||||
// software; you can redistribute it and/or modify it under the
|
||||
|
@ -17,17 +19,14 @@
|
|||
// USA.
|
||||
|
||||
#include <testsuite_hooks.h>
|
||||
#ifdef _GLIBCXX_USE___ENC_TRAITS
|
||||
#include <ext/enc_filebuf.h>
|
||||
#endif
|
||||
|
||||
void test01()
|
||||
{
|
||||
#ifdef _GLIBCXX_USE___ENC_TRAITS
|
||||
using namespace std;
|
||||
typedef __enc_traits state_type;
|
||||
typedef wchar_t char_type;
|
||||
typedef __gnu_cxx::enc_filebuf<char_type> filebuf_type;
|
||||
typedef filebuf_type::state_type state_type;
|
||||
typedef codecvt<char_type, char, state_type> enc_codecvt;
|
||||
|
||||
bool test __attribute__((unused)) = true;
|
||||
|
@ -47,7 +46,6 @@ void test01()
|
|||
catch(...)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
int main()
|
||||
|
|
Loading…
Reference in New Issue