summaryrefslogtreecommitdiff
path: root/libstdc++-v3/src
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3/src')
-rw-r--r--libstdc++-v3/src/Makefile.am24
-rw-r--r--libstdc++-v3/src/Makefile.in18
-rw-r--r--libstdc++-v3/src/complex.cc328
-rw-r--r--libstdc++-v3/src/complexf.cc1
-rw-r--r--libstdc++-v3/src/complexl.cc3
-rw-r--r--libstdc++-v3/src/locale.cc6
-rw-r--r--libstdc++-v3/src/localename.cc3
7 files changed, 129 insertions, 254 deletions
diff --git a/libstdc++-v3/src/Makefile.am b/libstdc++-v3/src/Makefile.am
index 92a197a2dc5..fa8527ca15f 100644
--- a/libstdc++-v3/src/Makefile.am
+++ b/libstdc++-v3/src/Makefile.am
@@ -21,7 +21,7 @@
## Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
## USA.
-## $Id: Makefile.am,v 1.29 2000/08/22 17:22:38 bkoz Exp $
+## $Id: Makefile.am,v 1.30 2000/09/14 19:44:03 bkoz Exp $
AUTOMAKE_OPTIONS = 1.3 gnits
MAINT_CHARSET = latin1
@@ -48,7 +48,7 @@ EXTRA_LTLIBRARIES = libinst-string.la libinst-wstring.la
# NB: DEBUGFLAGS have to be at the end so that -O2 can be overridden.
AC_CXXFLAGS = \
$(WERROR) @WFMT_FLAGS@ @CPU_FLAGS@ @EXTRA_CXX_FLAGS@ \
- @SECTION_FLAGS@ @DEBUG_FLAGS@
+ @SECTION_FLAGS@ @CSHADOWFLAGS@ @DEBUG_FLAGS@
# Need to manually set this option because AC_CXXFLAGS has to be at
# the end of the compile line so that -O2 can be overridden as the
@@ -70,9 +70,10 @@ LIBIO_INCLUDES = -I$(top_srcdir)/libio
endif
if GLIBCPP_USE_CSHADOW
-CSHADOW_INCLUDES =
#CSHADOW_INCLUDES = \
-# @CSHADOWFLAGS@ -I$(top_srcdir)/shadow -I$(top_builddir)/cshadow
+# -I$(top_srcdir)/std -I$(top_srcdir)/shadow -I$(top_builddir)/cshadow
+CSHADOW_INCLUDES = \
+ -I$(top_srcdir)/std -I$(top_srcdir)/shadow
else
CSHADOW_INCLUDES =
endif
@@ -82,17 +83,20 @@ CONFIG_INCLUDES = \
-I$(top_srcdir)/@ctype_include_dir@
INCLUDES = \
- -D_GNU_SOURCE -nostdinc++ $(CSHADOW_INCLUDES) -I$(top_srcdir) \
- $(LIBIO_INCLUDES) $(CONFIG_INCLUDES) $(TOPLEVEL_INCLUDES)
+ -D_GNU_SOURCE -D_ISOC99_SOURCE -nostdinc++ $(CSHADOW_INCLUDES) \
+ -I$(top_builddir) -I$(top_srcdir) \
+ $(CONFIG_INCLUDES) $(LIBIO_INCLUDES) $(TOPLEVEL_INCLUDES)
-# Need to explicitly set this so that AM_CXXFLAGS is last. (That way,
+# Need to explicitly set this so that AM_CXXFLAGS is last. In
+# addition, we don't use $(DEFS), which tries to set $(top_srcdir) as
+# an include diretory, which screws up shadow headers. (That way,
# things like -O2 passed down from the toplevel can be overridden by
# --enable-debug.)
-CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+CXXCOMPILE = $(CXX) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(CXXFLAGS) $(AM_CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(INCLUDES) \
+LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(AM_CXXFLAGS)
# We have a problem when building the shared libstdc++ object if the
@@ -246,7 +250,7 @@ $(libstdc___la_OBJECTS): $(CSHADOW_H)
$(top_builddir)/stamp-cshadow: $(top_srcdir)/mkinclosure \
$(top_srcdir)/mkcshadow
$(top_srcdir)/mkinclosure \
- "-I $(top_builddir)/../../gcc/include -I /usr/include -G machine/ansi.h" | $(top_srcdir)/mkcshadow;
+ "-I $(top_builddir)/../../gcc/include -I /usr/include -G fcntl.h unistd.h" | $(top_srcdir)/mkcshadow;
rm -f $(top_builddir)/stamp-cshadow
echo "done" > $(top_builddir)/stamp-cshadow
diff --git a/libstdc++-v3/src/Makefile.in b/libstdc++-v3/src/Makefile.in
index a3aed9b757d..572033ad16d 100644
--- a/libstdc++-v3/src/Makefile.in
+++ b/libstdc++-v3/src/Makefile.in
@@ -124,7 +124,7 @@ EXTRA_LTLIBRARIES = libinst-string.la libinst-wstring.la
# These bits are all figured out from configure. Look in acinclude.m4
# or configure.in to see how they are set.
# NB: DEBUGFLAGS have to be at the end so that -O2 can be overridden.
-AC_CXXFLAGS = $(WERROR) @WFMT_FLAGS@ @CPU_FLAGS@ @EXTRA_CXX_FLAGS@ @SECTION_FLAGS@ @DEBUG_FLAGS@
+AC_CXXFLAGS = $(WERROR) @WFMT_FLAGS@ @CPU_FLAGS@ @EXTRA_CXX_FLAGS@ @SECTION_FLAGS@ @CSHADOWFLAGS@ @DEBUG_FLAGS@
# Need to manually set this option because AC_CXXFLAGS has to be at
@@ -137,24 +137,24 @@ AM_CXXFLAGS = -fno-implicit-templates $(OPTIMIZE_CXXFLAGS) -Wall -Wno-format
TOPLEVEL_INCLUDES = -I$(includedir)
@GLIBCPP_NEED_LIBIO_TRUE@LIBIO_INCLUDES = -I$(top_builddir)/libio -I$(top_srcdir)/libio
@GLIBCPP_NEED_LIBIO_FALSE@LIBIO_INCLUDES = -I$(top_srcdir)/libio
-#CSHADOW_INCLUDES = \
-# @CSHADOWFLAGS@ -I$(top_srcdir)/shadow -I$(top_builddir)/cshadow
-@GLIBCPP_USE_CSHADOW_TRUE@CSHADOW_INCLUDES =
+@GLIBCPP_USE_CSHADOW_TRUE@CSHADOW_INCLUDES = -I$(top_srcdir)/std -I$(top_srcdir)/shadow
@GLIBCPP_USE_CSHADOW_FALSE@CSHADOW_INCLUDES =
CONFIG_INCLUDES = -I$(top_srcdir)/@cpu_include_dir@ -I$(top_srcdir)/@ctype_include_dir@
-INCLUDES = -D_GNU_SOURCE -nostdinc++ $(CSHADOW_INCLUDES) -I$(top_srcdir) $(LIBIO_INCLUDES) $(CONFIG_INCLUDES) $(TOPLEVEL_INCLUDES)
+INCLUDES = -D_GNU_SOURCE -D_ISOC99_SOURCE -nostdinc++ $(CSHADOW_INCLUDES) -I$(top_builddir) -I$(top_srcdir) $(CONFIG_INCLUDES) $(LIBIO_INCLUDES) $(TOPLEVEL_INCLUDES)
-# Need to explicitly set this so that AM_CXXFLAGS is last. (That way,
+# Need to explicitly set this so that AM_CXXFLAGS is last. In
+# addition, we don't use $(DEFS), which tries to set $(top_srcdir) as
+# an include diretory, which screws up shadow headers. (That way,
# things like -O2 passed down from the toplevel can be overridden by
# --enable-debug.)
-CXXCOMPILE = $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(AM_CXXFLAGS)
+CXXCOMPILE = $(CXX) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(AM_CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(AM_CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(AM_CXXFLAGS)
# We have a problem when building the shared libstdc++ object if the
@@ -457,7 +457,7 @@ $(libstdc___la_OBJECTS): $(CSHADOW_H)
$(top_builddir)/stamp-cshadow: $(top_srcdir)/mkinclosure \
$(top_srcdir)/mkcshadow
$(top_srcdir)/mkinclosure \
- "-I $(top_builddir)/../../gcc/include -I /usr/include -G machine/ansi.h" | $(top_srcdir)/mkcshadow;
+ "-I $(top_builddir)/../../gcc/include -I /usr/include -G fcntl.h unistd.h" | $(top_srcdir)/mkcshadow;
rm -f $(top_builddir)/stamp-cshadow
echo "done" > $(top_builddir)/stamp-cshadow
diff --git a/libstdc++-v3/src/complex.cc b/libstdc++-v3/src/complex.cc
index b19a74a9dab..f9f64196199 100644
--- a/libstdc++-v3/src/complex.cc
+++ b/libstdc++-v3/src/complex.cc
@@ -36,239 +36,115 @@
#ifndef FLT
# define FLT double
-# define FCT(name) ::name
#endif
+// This file often breaks due to compiler bugs. May need to put in guards, ie:
+// #if defined(_GLIBCPP_BUGGY_FLOAT_COMPLEX)
+// and
+// #if defined(_GLIBCPP_FLOAT_SPECIALIZATION)
+
namespace std
{
-
- template<>
- FLT
- abs(const complex<FLT>& __x)
- { return FCT(cabs)(__x._M_value); }
-
- template<>
- FLT
- arg(const complex<FLT>& __x)
- { return FCT(carg)(__x._M_value); }
-
- template<>
- complex<FLT>
- polar(const FLT& __rho, const FLT& __theta)
- {
-#if defined _G_HAVE_SINCOS && !defined __osf__
- // Although sincos does exist on OSF3.2 and OSF4.0 we cannot use it
- // since the necessary types are not defined in the headers.
- FLT __sinx, __cosx;
- FCT(sincos)(__theta, &__sinx, &__cosx);
- return complex<FLT>(__rho * __cosx, __rho * __sinx);
-#else
-#if defined(_GLIBCPP_BUGGY_FLOAT_COMPLEX) \
- && defined(_GLIBCPP_FLOAT_SPECIALIZATION)
- complex<FLT> __tmpf(__rho * FCT(cos)(__theta),
- __rho * FCT(sin)(__theta));
- return __tmpf;
-#else
- return complex<FLT>(__rho * FCT(cos)(__theta),
- __rho * FCT(sin)(__theta));
-#endif
-#endif
- }
-
- template<>
- complex<FLT>
- cos(const complex<FLT>& __x)
-#if defined(_GLIBCPP_BUGGY_FLOAT_COMPLEX) \
- && defined(_GLIBCPP_FLOAT_SPECIALIZATION)
- {
- complex<FLT> __tmpf(FCT(ccos)(__x._M_value));
- return __tmpf;
- }
-#else
- { return complex<FLT>(FCT(ccos)(__x._M_value)); }
-#endif
-
- template<>
- complex<FLT>
- cosh(const complex<FLT>& __x)
-#if defined(_GLIBCPP_BUGGY_FLOAT_COMPLEX) \
- && defined(_GLIBCPP_FLOAT_SPECIALIZATION)
- {
- complex<FLT> __tmpf(FCT(ccosh)(__x._M_value));
- return __tmpf;
- }
-#else
- { return complex<FLT>(FCT(ccosh)(__x._M_value)); }
-#endif
-
- template<>
- complex<FLT>
- exp(const complex<FLT>& __x)
-#if defined(_GLIBCPP_BUGGY_FLOAT_COMPLEX) \
- && defined(_GLIBCPP_FLOAT_SPECIALIZATION)
- {
- complex<FLT> __tmpf(FCT(cexp)(__x._M_value));
- return __tmpf;
- }
-#else
- { return complex<FLT>(FCT(cexp)(__x._M_value)); }
-#endif
-
- template<>
- complex<FLT>
- log(const complex<FLT>& __x)
-#if defined(_GLIBCPP_BUGGY_FLOAT_COMPLEX) \
- && defined(_GLIBCPP_FLOAT_SPECIALIZATION)
- {
- complex<FLT> __tmpf(FCT(c_log)(__x._M_value));
- return __tmpf;
- }
-#else
- { return complex<FLT>(FCT(c_log)(__x._M_value)); }
-#endif
-
- template<>
- complex<FLT>
- log10(const complex<FLT>& __x)
-#if defined(_GLIBCPP_BUGGY_FLOAT_COMPLEX) \
- && defined(_GLIBCPP_FLOAT_SPECIALIZATION)
- {
- complex<FLT> __tmpf(FCT(clog10)(__x._M_value));
- return __tmpf;
- }
-#else
- { return complex<FLT>(FCT(clog10)(__x._M_value)); }
-#endif
-
- template<>
- complex<FLT>
- pow(const complex<FLT>& __x, int __n)
-#if defined(_GLIBCPP_BUGGY_FLOAT_COMPLEX) \
- && defined(_GLIBCPP_FLOAT_SPECIALIZATION)
- {
- complex<FLT> __tmpf(FCT(cexp) (__n * FCT(c_log)(__x._M_value)));
- return __tmpf;
- }
-#else
- { return complex<FLT>(FCT(cexp) (__n * FCT(c_log)(__x._M_value))); }
-#endif
-
-
- template<>
- complex<FLT>
- pow(const complex<FLT>& __x, const FLT& __y)
-#if defined(_GLIBCPP_BUGGY_FLOAT_COMPLEX) \
- && defined(_GLIBCPP_FLOAT_SPECIALIZATION)
- {
- complex<FLT> __tmpf(FCT(cexp) (__y * FCT(c_log)(__x._M_value)));
- return __tmpf;
- }
-#else
- { return complex<FLT>(FCT(cexp) (__y * FCT(c_log)(__x._M_value))); }
-#endif
-
- template<>
- complex<FLT>
- pow(const complex<FLT>& __x, const complex<FLT>& __y)
-#if defined(_GLIBCPP_BUGGY_FLOAT_COMPLEX) \
- && defined(_GLIBCPP_FLOAT_SPECIALIZATION)
- {
- complex<FLT> __tmpf(FCT(cpow)(__x._M_value, __y._M_value));
- return __tmpf;
- }
-#else
- { return complex<FLT>(FCT(cpow)(__x._M_value, __y._M_value)); }
-#endif
-
- template<>
- complex<FLT>
- pow(const FLT& __x, const complex<FLT>& __y)
-#if defined(_GLIBCPP_BUGGY_FLOAT_COMPLEX) \
- && defined(_GLIBCPP_FLOAT_SPECIALIZATION)
- {
- complex<FLT> __tmpf(FCT(cexp)(__y._M_value * FCT(log)(__x)));
- return __tmpf;
- }
-#else
- { return complex<FLT>(FCT(cexp)(__y._M_value * FCT(log)(__x))); }
-#endif
-
- template<>
- complex<FLT>
- sin(const complex<FLT>& __x)
-#if defined(_GLIBCPP_BUGGY_FLOAT_COMPLEX) \
- && defined(_GLIBCPP_FLOAT_SPECIALIZATION)
- {
- complex<FLT> __tmpf(FCT(csin)(__x._M_value));
- return __tmpf;
- }
-#else
- { return complex<FLT>(FCT(csin)(__x._M_value)); }
-#endif
-
- template<>
- complex<FLT>
- sinh(const complex<FLT>& __x)
-#if defined(_GLIBCPP_BUGGY_FLOAT_COMPLEX) \
- && defined(_GLIBCPP_FLOAT_SPECIALIZATION)
- {
- complex<FLT> __tmpf(FCT(csinh)(__x._M_value));
- return __tmpf;
- }
-#else
- { return complex<FLT>(FCT(csinh)(__x._M_value)); }
-#endif
-
- template<>
- complex<FLT>
- sqrt(const complex<FLT>& __x)
-#if defined(_GLIBCPP_BUGGY_FLOAT_COMPLEX) \
- && defined(_GLIBCPP_FLOAT_SPECIALIZATION)
- {
- complex<FLT> __tmpf(FCT(csqrt)(__x._M_value));
- return __tmpf;
- }
-#else
- { return complex<FLT>(FCT(csqrt)(__x._M_value)); }
-#endif
-
- template<>
- complex<FLT>
- tan(const complex<FLT>& __x)
-#if defined(_GLIBCPP_BUGGY_FLOAT_COMPLEX) \
- && defined(_GLIBCPP_FLOAT_SPECIALIZATION)
- {
- complex<FLT> __tmpf(FCT(ctan)(__x._M_value));
- return __tmpf;
- }
-#else
- { return complex<FLT>(FCT(ctan)(__x._M_value)); }
-#endif
-
- template<>
- complex<FLT>
- tanh(const complex<FLT>& __x)
-#if defined(_GLIBCPP_BUGGY_FLOAT_COMPLEX) \
- && defined(_GLIBCPP_FLOAT_SPECIALIZATION)
- {
- complex<FLT> __tmpf(FCT(ctanh)(__x._M_value));
- return __tmpf;
- }
-#else
- { return complex<FLT>(FCT(ctanh)(__x._M_value)); }
-#endif
-
+ template<>
+ FLT
+ abs(const complex<FLT>& __x)
+ { return cabs(__x._M_value); }
+
+ template<>
+ FLT
+ arg(const complex<FLT>& __x)
+ { return carg(__x._M_value); }
+
+ template<>
+ complex<FLT>
+ polar(const FLT& __rho, const FLT& __theta)
+ {
+#if 0
+// XXX
+// defined(_GLIBCPP_HAVE_SINCOS) && !defined(__osf__)
+ // Although sincos does exist on OSF3.2 and OSF4.0 we cannot use it
+ // since the necessary types are not defined in the headers.
+ FLT __sinx, __cosx;
+ sincos(__theta, &__sinx, &__cosx);
+ return complex<FLT>(__rho * __cosx, __rho * __sinx);
+#else
+ return complex<FLT>(__rho * cos(__theta), __rho * sin(__theta));
+#endif
+ }
+
+ template<>
+ complex<FLT>
+ cos(const complex<FLT>& __x)
+ { return complex<FLT>(ccos(__x._M_value)); }
+
+ template<>
+ complex<FLT>
+ cosh(const complex<FLT>& __x)
+ { return complex<FLT>(ccosh(__x._M_value)); }
+
+ template<>
+ complex<FLT>
+ exp(const complex<FLT>& __x)
+ { return complex<FLT>(cexp(__x._M_value)); }
+
+ template<>
+ complex<FLT>
+ log(const complex<FLT>& __x)
+ { return complex<FLT>(c_log(__x._M_value)); }
+
+ template<>
+ complex<FLT>
+ log10(const complex<FLT>& __x)
+ { return complex<FLT>(clog10(__x._M_value)); }
+
+ template<>
+ complex<FLT>
+ pow(const complex<FLT>& __x, int __n)
+ { return complex<FLT>(cexp(__n * c_log(__x._M_value))); }
+
+ template<>
+ complex<FLT>
+ pow(const complex<FLT>& __x, const FLT& __y)
+ { return complex<FLT>(cexp(__y * c_log(__x._M_value))); }
+
+ template<>
+ complex<FLT>
+ pow(const complex<FLT>& __x, const complex<FLT>& __y)
+ { return complex<FLT>(cpow(__x._M_value, __y._M_value)); }
+
+ template<>
+ complex<FLT>
+ pow(const FLT& __x, const complex<FLT>& __y)
+ { return complex<FLT>(cexp(__y._M_value * log(__x))); }
+
+ template<>
+ complex<FLT>
+ sin(const complex<FLT>& __x)
+ { return complex<FLT>(csin(__x._M_value)); }
+
+ template<>
+ complex<FLT>
+ sinh(const complex<FLT>& __x)
+ { return complex<FLT>(csinh(__x._M_value)); }
+
+ template<>
+ complex<FLT>
+ sqrt(const complex<FLT>& __x)
+ { return complex<FLT>(csqrt(__x._M_value)); }
+
+ template<>
+ complex<FLT>
+ tan(const complex<FLT>& __x)
+ { return complex<FLT>(ctan(__x._M_value)); }
+
+ template<>
+ complex<FLT>
+ tanh(const complex<FLT>& __x)
+ { return complex<FLT>(ctanh(__x._M_value)); }
+
} // namespace std
-
-
-
-
-
-
-
-
diff --git a/libstdc++-v3/src/complexf.cc b/libstdc++-v3/src/complexf.cc
index 5ef12afce18..7831d7e7f6c 100644
--- a/libstdc++-v3/src/complexf.cc
+++ b/libstdc++-v3/src/complexf.cc
@@ -1,5 +1,4 @@
#define FLT float
-#define FCT(name) ::name##f
// Used in complex.cc to work around GCC's buggy __complex__ float support.
#define _GLIBCPP_FLOAT_SPECIALIZATION 1
#include "complex.cc"
diff --git a/libstdc++-v3/src/complexl.cc b/libstdc++-v3/src/complexl.cc
index 4c11abd9407..0cfab1c3910 100644
--- a/libstdc++-v3/src/complexl.cc
+++ b/libstdc++-v3/src/complexl.cc
@@ -1,8 +1,7 @@
#include <bits/c++config.h>
-#ifdef _GLIBCPP_HAVE_SINL
+#ifdef _GLIBCPP_USE_LONG_LONG
/* We compile these functions only when we have the long double functions
available. */
#define FLT long double
-#define FCT(name) ::name##l
#include "complex.cc"
#endif
diff --git a/libstdc++-v3/src/locale.cc b/libstdc++-v3/src/locale.cc
index 64996efb304..ae56bdbb040 100644
--- a/libstdc++-v3/src/locale.cc
+++ b/libstdc++-v3/src/locale.cc
@@ -38,7 +38,7 @@
#include <bits/std_vector.h>
#include <bits/std_memory.h> // for auto_ptr
#ifdef _GLIBCPP_USE_WCHAR_T
- #include <bits/std_cwctype.h> // for towupper, etc.
+# include <bits/std_cwctype.h> // for towupper, etc.
#endif
namespace std {
@@ -952,7 +952,7 @@ namespace std {
do_widen(const char* __low, const char* __high, wchar_t* __dest) const
{
mbstate_t __state;
- memset(&__state, 0, sizeof(mbstate_t));
+ memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
mbsrtowcs(__dest, &__low, __high - __low, &__state);
return __high;
}
@@ -971,7 +971,7 @@ namespace std {
char* __dest) const
{
mbstate_t __state;
- memset(&__state, 0, sizeof(mbstate_t));
+ memset(static_cast<void*>(&__state), 0, sizeof(mbstate_t));
size_t __len = __high - __low;
size_t __conv = wcsrtombs(__dest, &__low, __len, &__state);
if (__conv == __len)
diff --git a/libstdc++-v3/src/localename.cc b/libstdc++-v3/src/localename.cc
index 7d6f259acce..8205be07b44 100644
--- a/libstdc++-v3/src/localename.cc
+++ b/libstdc++-v3/src/localename.cc
@@ -29,7 +29,6 @@
#include <bits/std_clocale.h>
#include <bits/std_locale.h>
#include <bits/std_cstring.h>
-#include <bits/std_cassert.h>
#include <bits/std_vector.h>
#include <bits/std_stdexcept.h>
@@ -167,8 +166,6 @@ namespace std {
locale::_Impl::
_M_replace_categories(const _Impl* __other, category __cat)
{
- assert((__cat & locale::all) && !(__cat & ~locale::all));
-
unsigned int __mask = locale::all & -static_cast<unsigned int>(locale::all);
for (unsigned int __ix = 0; (-__mask & __cat) != 0; ++__ix, (__mask <<= 1))
{