diff -r 000000000000 -r e4d67989cc36 stdcpp/tsrc/Stdcpp_test/stdcxx/testengine/src/opt_types.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/stdcpp/tsrc/Stdcpp_test/stdcxx/testengine/src/opt_types.cpp Tue Feb 02 02:01:42 2010 +0200 @@ -0,0 +1,200 @@ +/************************************************************************ + * + * opt_types.cpp - definitions of type option handlers + * + * $Id: opt_types.cpp 290026 2005-09-19 00:12:38Z sebor $ + * + ************************************************************************ + * + * Copyright (c) 1994-2005 Quovadx, Inc., acting through its Rogue Wave + * Software division. Licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0. Unless required by + * applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + * CONDITIONS OF ANY KIND, either express or implied. See the License + * for the specific language governing permissions and limitations under + * the License. + * + **************************************************************************/ + +// expand _TEST_EXPORT macros +#define _RWSTD_TEST_SRC + +#include "opt_types.h" + +#include +#include + +#include + +enum { + rw_bool, rw_char, rw_uchar, rw_schar, rw_ushrt, rw_shrt, + rw_uint, rw_int, rw_ulong, rw_long, rw_ullong, rw_llong, + rw_flt, rw_dbl, rw_ldbl, rw_wchar, rw_pvoid +}; + + +static int +_rw_disabled_types = 0; + +static int +_rw_enabled_types = 0; + + +static int +_rw_enable_type (int bit, int enable) +{ + const int set_mask = 1 << bit; + + if (enable) + _rw_enabled_types |= set_mask; + else + _rw_disabled_types |= set_mask; + + return 0; +} + + +#define DEFINE_HANDLERS(T) \ + static int _rw_no_ ## T (int, char *[]) { \ + return _rw_enable_type (rw_ ## T, false); \ + } \ + static int _rw_en_ ## T (int, char *[]) { \ + return _rw_enable_type (rw_ ## T, true); \ + } \ + typedef void unused_type /* allow a semicolon */ + +DEFINE_HANDLERS (bool); +DEFINE_HANDLERS (char); +DEFINE_HANDLERS (schar); +DEFINE_HANDLERS (uchar); +DEFINE_HANDLERS (shrt); +DEFINE_HANDLERS (ushrt); +DEFINE_HANDLERS (int); +DEFINE_HANDLERS (uint); +DEFINE_HANDLERS (long); +DEFINE_HANDLERS (ulong); +DEFINE_HANDLERS (llong); +DEFINE_HANDLERS (ullong); +DEFINE_HANDLERS (flt); +DEFINE_HANDLERS (dbl); +DEFINE_HANDLERS (ldbl); +DEFINE_HANDLERS (wchar); +DEFINE_HANDLERS (pvoid); + +/**************************************************************************/ + +int _rw_setopts_types () +{ + const int result = + rw_setopts (// options to disable fundamental types + "|-no-bool |-no-char |-no-schar |-no-uchar " + "|-no-shrt |-no-ushrt " + "|-no-int |-no-uint " + "|-no-long |-no-ulong " + "|-no-llong |-no-ullong " + "|-no-flt |-no-dbl |-no-ldbl " + "|-no-wchar |-no-pvoid " + // options to enable fundamental types + "|-enable-bool |-enable-char |-enable-schar |-enable-uchar " + "|-enable-shrt |-enable-ushrt " + "|-enable-int |-enable-uint " + "|-enable-long |-enable-ulong " + "|-enable-llong |-enable-ullong " + "|-enable-flt |-enable-dbl |-enable-ldbl " + "|-enable-wchar |-enable-pvoid", + // handlers to disable fundamental types + _rw_no_bool, _rw_no_char, _rw_no_schar, _rw_no_uchar, + _rw_no_shrt, _rw_no_ushrt, + _rw_no_int, _rw_no_uint, + _rw_no_long, _rw_no_ulong, + _rw_no_llong, _rw_no_ullong, + _rw_no_flt, _rw_no_dbl, _rw_no_ldbl, + _rw_no_wchar, _rw_no_pvoid, + // handlers to enable fundamental types + _rw_en_bool, _rw_en_char, _rw_en_schar, _rw_en_uchar, + _rw_en_shrt, _rw_en_ushrt, + _rw_en_int, _rw_en_uint, + _rw_en_long, _rw_en_ulong, + _rw_en_llong, _rw_en_ullong, + _rw_en_flt, _rw_en_dbl, _rw_en_ldbl, + _rw_en_wchar, _rw_en_pvoid); + + return result; +} + +/**************************************************************************/ + +_TEST_EXPORT int +rw_enabled (const char *name) +{ + int enabled = -1; + + static const struct { + int bit; + const char *name; + } types[] = { + { rw_bool, "bool" }, + + { rw_char, "char" }, + + { rw_schar, "schar" }, + { rw_schar, "signed char" }, + { rw_uchar, "uchar" }, + { rw_uchar, "unsigned char" }, + + { rw_shrt, "shrt" }, + { rw_shrt, "short" }, + { rw_shrt, "signed short" }, + { rw_ushrt, "ushrt" }, + { rw_ushrt, "unsigned short" }, + + { rw_int, "int" }, + { rw_int, "signed int" }, + { rw_uint, "uint" }, + { rw_uint, "unsigned int" }, + + { rw_long, "long" }, + { rw_long, "signed long" }, + { rw_ulong, "ulong" }, + { rw_ulong, "unsigned long" }, + + { rw_llong, "llong" }, + { rw_llong, "long long" }, + { rw_llong, "signed long long" }, + { rw_ullong, "ullong" }, + { rw_ullong, "unsigned long long" }, + + { rw_flt, "flt" }, + { rw_flt, "float" }, + + { rw_dbl, "dbl" }, + { rw_dbl, "double" }, + + { rw_ldbl, "ldbl" }, + { rw_ldbl, "long double" }, + + { rw_wchar, "wchar" }, + { rw_wchar, "wchar_t" }, + + { rw_pvoid, "pvoid" }, + { rw_pvoid, "void*" } + }; + + for (size_t i = 0; i != sizeof types / sizeof *types; ++i) { + if (0 == strcmp (types [i].name, name)) { + const int mask = 1 << types [i].bit; + + enabled = !(_rw_disabled_types & mask); + + if (_rw_enabled_types) + enabled = enabled && (_rw_enabled_types & mask); + + break; + } + } + + return enabled; +}