📄 stlsoft.h
字号:
*/
#if defined(STLSOFT_CF_ASSERT_SUPPORT)
# if defined(__WATCOMC__)
# define STLSOFT_MESSAGE_ASSERT(msg, ex) STLSOFT_ASSERT(ex)
# elif defined(__COMO__) || \
defined(__GNUC__) || \
defined(__MWERKS__)
# define STLSOFT_MESSAGE_ASSERT(msg, ex) STLSOFT_ASSERT((msg && ex))
# else /* ? compiler */
# define STLSOFT_MESSAGE_ASSERT(msg, ex) STLSOFT_ASSERT((msg, ex))
# endif /* __WATCOMC__ */
#else /* ? STLSOFT_CF_ASSERT_SUPPORT */
# define STLSOFT_MESSAGE_ASSERT(msg, ex)
#endif /* STLSOFT_CF_ASSERT_SUPPORT */
/** \def stlsoft_message_assert(ex)
*
* \brief [DEPRECATED] Defines a runtime assertion, with message
*
* \param ex Must be non-zero, or an assertion will be fired
* \param msg The literal character string message to be included in the assertion
*
* \deprecated This is deprecated in favour of \ref STLSOFT_MESSAGE_ASSERT().
*
* \note This is a simple \#define for STLSOFT_MESSAGE_ASSERT()
*/
#define stlsoft_message_assert(msg, ex) STLSOFT_MESSAGE_ASSERT(msg, ex)
/** \def STLSOFT_STATIC_ASSERT(ex)
*
* \brief Defines an assertion construct for compile-time verification.
*
* \param ex A compile-time evaluatable condition that must be non-zero, or compilation will fail.
*/
#if defined(STLSOFT_CF_STATIC_ASSERT_SUPPORT)
# if ( defined(STLSOFT_COMPILER_IS_GCC) && \
( __GNUC__ < 3 || \
( __GNUC__ == 3 && \
__GNUC_MINOR__ < 4))) || \
defined(STLSOFT_COMPILER_IS_INTEL)
# define STLSOFT_STATIC_ASSERT(ex) do { typedef int ai[(ex) ? 1 : -1]; } while(0)
# else /* ? compiler */
# define STLSOFT_STATIC_ASSERT(ex) do { typedef int ai[(ex) ? 1 : 0]; } while(0)
# endif /* compiler */
#else /* ? STLSOFT_CF_STATIC_ASSERT_SUPPORT */
# define STLSOFT_STATIC_ASSERT(ex) STLSOFT_MESSAGE_ASSERT("Static assertion failed: ", (ex))
#endif /* STLSOFT_CF_STATIC_ASSERT_SUPPORT */
/** \def stlsoft_static_assert(ex)
*
* \brief [DEPRECATED] Defines a compile-time assertion
*
* \param ex Must be non-zero, or compilation will fail
*
* \note This is a simple \#define for STLSOFT_STATIC_ASSERT()
*
* \deprecated This is <b>heavily</b> deprecated in favour of \ref STLSOFT_STATIC_ASSERT().
*/
#define stlsoft_static_assert(ex) STLSOFT_STATIC_ASSERT(ex)
/** @} */
/* /////////////////////////////////////////////////////////////////////////
* Namespace
*
* The STLSoft uses namespaces by default, unless the _STLSOFT_NO_NAMESPACES
* preprocessor symbol is defined, in which case all elements are placed within
* the global namespace.
*
* The macro stlsoft_ns_qual() macro can be used to refer to elements in the
* STLSoft libraries irrespective of whether they are in the stlsoft namespace
* or in the global namespace.
*
* Some compilers do not support the standard library in the std namespace, so
* the stlsoft_ns_qual_std() macro can be used to refer to elements in the
* STLSoft libraries irrespective of whether they are in the std namespace or
* in the global namespace.
*/
/* No C++ compilation means no namespaces */
#if !defined(__cplusplus)
# define _STLSOFT_NO_NAMESPACES
#endif /* !__cplusplus */
/* No STLSoft namespaces means no stlsoft namespace */
#if defined(_STLSOFT_NO_NAMESPACES)
# define _STLSOFT_NO_NAMESPACE
#endif /* _STLSOFT_NO_NAMESPACES */
#ifndef _STLSOFT_NO_NAMESPACE
/** \brief The <code class="namespace">stlsoft</code> namespace contains
* all components in the \ref group__project__stlsoft "STLSoft" project,
* and is the root namespace within which all the other
* \ref group__projects "STLSoft sub-projects" reside.
*
* \note If either/both of the symbols <code>_STLSOFT_NO_NAMESPACES</code>
* and <code>_STLSOFT_NO_NAMESPACE</code> are defined, all
* \ref group__project__stlsoft "STLSoft" components will be defined in the
* global namespace. The difference between the two is that definition of
* <code>_STLSOFT_NO_NAMESPACES</code> causes all STLSoft library
* components (i.e. those of <b>all</b>
* \ref group__projects "STLSoft sub-projects") to be defined in the
* global namespace, whereas <code>_STLSOFT_NO_NAMESPACES</code> has this
* effect on only those within the main
* \ref group__project__stlsoft "STLSoft" project.
*
* \note This is a vestige of compatibility with compilers with
* no (or no sensible) namespace support that is maintained for reasons of
* backwards compatiblity and because it is, in <i>rare circumstances</i>, a
* useful facility.
*/
namespace stlsoft
{
#endif /* !_STLSOFT_NO_NAMESPACE */
/** \def stlsoft_ns_qual(x)
* \brief Qualifies with <b>stlsoft::</b> if STLSoft is using namespaces or, if not, does not qualify
*/
/** \def stlsoft_ns_using(x)
* \brief Declares a using directive (with respect to <b>stlsoft</b>) if STLSoft is using namespaces or, if not, does nothing
*/
#ifndef _STLSOFT_NO_NAMESPACE
# define stlsoft_ns_qual(x) ::stlsoft::x
# define stlsoft_ns_using(x) using ::stlsoft::x;
#else /* ? _STLSOFT_NO_NAMESPACE */
# define stlsoft_ns_qual(x) x
# define stlsoft_ns_using(x)
#endif /* !_STLSOFT_NO_NAMESPACE */
/** \def stlsoft_ns_qual_std(x)
* \brief Qualifies with <b>std::</b> if STLSoft is being translated in the context of the standard library being within the <b>std</b> namespace or, if not, does not qualify
*/
/** \def stlsoft_ns_using_std(x)
* \brief Declares a using directive (with respect to <b>std</b>) if STLSoft is being translated in the context of the standard library being within the <b>std</b> namespace or, if not, does nothing
*/
#ifdef STLSOFT_CF_std_NAMESPACE
# define stlsoft_ns_qual_std(x) ::std::x
# define stlsoft_ns_qual_std_(x) std::x
# define stlsoft_ns_using_std(x) using ::std::x;
#else /* ? STLSOFT_CF_std_NAMESPACE */
# define stlsoft_ns_qual_std(x) x
# define stlsoft_ns_using_std(x)
#endif /* !STLSOFT_CF_std_NAMESPACE */
/** \def STLSOFT_NS_GLOBAL(X)
* \brief Qualifies <b>X</b> with <b>::</b> if compiling C++, otherwise just resolves to X
*/
#if defined(__cplusplus)
# define STLSOFT_NS_GLOBAL(x) ::x
#else /* ? __cplusplus */
# define STLSOFT_NS_GLOBAL(x) x
#endif /* __cplusplus */
/* /////////////////////////////////////////////////////////////////////////
* Typedefs
*
* The STLSoft uses a number of typedefs to aid in compiler-independence in the
* libraries' main code.
*/
/* Type definitions - precursors */
#ifndef STLSOFT_DOCUMENTATION_SKIP_SECTION
/* ptrdiff_t
*/
#ifndef _STLSOFT_NO_STD_INCLUDES
typedef ptrdiff_t ss_ptrdiff_pr_t_; /* ptr diff */
#else /* ? _STLSOFT_NO_STD_INCLUDES */
typedef int ss_ptrdiff_pr_t_; /* ptr diff */
#endif /* !_STLSOFT_NO_STD_INCLUDES */
/* size_t
*/
#ifndef _STLSOFT_NO_STD_INCLUDES
typedef size_t ss_size_pr_t_; /* size */
#else /* ? _STLSOFT_NO_STD_INCLUDES */
typedef unsigned int ss_size_pr_t_; /* size */
#endif /* !_STLSOFT_NO_STD_INCLUDES */
/* wchar_t
*
* wchar_t is either a built-in type, or is defined to unsigned 16-bit value
*/
#ifdef STLSOFT_CF_NATIVE_WCHAR_T_SUPPORT
/* It's some kind of compiler native type. */
# ifndef STLSOFT_NATIVE_WCHAR_T
/* either wchar_t itself */
typedef wchar_t ss_char_w_pr_t_; /* Unicode char type */
# else /* ? STLSOFT_NATIVE_WCHAR_T */
/* or a compiler-specific type */
typedef STLSOFT_NATIVE_WCHAR_T ss_char_w_pr_t_; /* Unicode char type */
# endif /* !STLSOFT_NATIVE_WCHAR_T */
#elif defined(STLSOFT_CF_TYPEDEF_WCHAR_T_SUPPORT)
typedef wchar_t ss_char_w_pr_t_; /* Unicode char type */
#else /* ? wchar_t support */
/* It's some kind of library-defined type. */
# ifndef _STLSOFT_NO_STD_INCLUDES
typedef wchar_t ss_char_w_pr_t_; /* Unicode char type */
# else /* ? _STLSOFT_NO_STD_INCLUDES */
typedef unsigned short ss_char_w_pr_t_; /* Unicode char type */
# endif /* STLSOFT_CF_NATIVE_WCHAR_T_SUPPORT */
#endif /* !STLSOFT_CF_NATIVE_WCHAR_T_SUPPORT */
/* 8-bit */
#ifdef STLSOFT_CF_8BIT_INT_SUPPORT
# ifdef STLSOFT_CF_8BIT_INT_IS_EXTENDED_TYPE
typedef STLSOFT_CF_EXTENDED_INT8_T ss_int8_pr_t_;
typedef STLSOFT_CF_EXTENDED_SINT8_T ss_sint8_pr_t_;
typedef STLSOFT_CF_EXTENDED_UINT8_T ss_uint8_pr_t_;
# else /* ? STLSOFT_CF_8BIT_INT_IS_EXTENDED_TYPE */
typedef STLSOFT_CF_STANDARD_INT8_T ss_int8_pr_t_;
typedef STLSOFT_CF_STANDARD_SINT8_T ss_sint8_pr_t_;
typedef STLSOFT_CF_STANDARD_UINT8_T ss_uint8_pr_t_;
# endif /* STLSOFT_CF_8BIT_INT_IS_EXTENDED_TYPE */
#else /* ? STLSOFT_CF_8BIT_INT_SUPPORT */
# error STLSoft requires 8-bit integer support
#endif /* STLSOFT_CF_8BIT_INT_SUPPORT */
/* 16-bit */
#ifdef STLSOFT_CF_16BIT_INT_SUPPORT
# ifdef STLSOFT_CF_16BIT_INT_IS_EXTENDED_TYPE
typedef STLSOFT_CF_EXTENDED_INT16_T ss_int16_pr_t_;
typedef STLSOFT_CF_EXTENDED_SINT16_T ss_sint16_pr_t_;
typedef STLSOFT_CF_EXTENDED_UINT16_T ss_uint16_pr_t_;
# else /* ? STLSOFT_CF_16BIT_INT_IS_EXTENDED_TYPE */
typedef STLSOFT_CF_STANDARD_INT16_T ss_int16_pr_t_;
typedef STLSOFT_CF_STANDARD_SINT16_T ss_sint16_pr_t_;
typedef STLSOFT_CF_STANDARD_UINT16_T ss_uint16_pr_t_;
# endif /* STLSOFT_CF_16BIT_INT_IS_EXTENDED_TYPE */
#else /* ? STLSOFT_CF_16BIT_INT_SUPPORT */
# error STLSoft requires 16-bit integer support
#endif /* STLSOFT_CF_16BIT_INT_SUPPORT */
/* 32-bit */
#ifdef STLSOFT_CF_32BIT_INT_SUPPORT
# ifdef STLSOFT_CF_32BIT_INT_IS_EXTENDED_TYPE
typedef STLSOFT_CF_EXTENDED_INT32_T ss_int32_pr_t_;
typedef STLSOFT_CF_EXTENDED_SINT32_T ss_sint32_pr_t_;
typedef STLSOFT_CF_EXTENDED_UINT32_T ss_uint32_pr_t_;
# else /* ? STLSOFT_CF_32BIT_INT_IS_EXTENDED_TYPE */
typedef STLSOFT_CF_STANDARD_INT32_T ss_int32_pr_t_;
typedef STLSOFT_CF_STANDARD_SINT32_T ss_sint32_pr_t_;
typedef STLSOFT_CF_STANDARD_UINT32_T ss_uint32_pr_t_;
# endif /* STLSOFT_CF_32BIT_INT_IS_EXTENDED_TYPE */
#else /* ? STLSOFT_CF_32BIT_INT_SUPPORT */
# error STLSoft requires 32-bit integer support
#endif /* STLSOFT_CF_32BIT_INT_SUPPORT */
/* 64-bit */
#ifdef STLSOFT_CF_64BIT_INT_SUPPORT
# ifdef STLSOFT_CF_64BIT_INT_IS_EXTENDED_TYPE
typedef STLSOFT_CF_EXTENDED_INT64_T ss_int64_pr_t_;
typedef STLSOFT_CF_EXTENDED_SINT64_T ss_sint64_pr_t_;
typedef STLSOFT_CF_EXTENDED_UINT64_T ss_uint64_pr_t_;
# else /* ? STLSOFT_CF_64BIT_INT_IS_EXTENDED_TYPE */
typedef STLSOFT_CF_STANDARD_INT64_T ss_int64_pr_t_;
typedef STLSOFT_CF_STANDARD_SINT64_T ss_sint64_pr_t_;
typedef STLSOFT_CF_STANDARD_UINT64_T ss_uint64_pr_t_;
# endif /* STLSOFT_CF_64BIT_INT_IS_EXTENDED_TYPE */
#endif /* STLSOFT_CF_64BIT_INT_SUPPORT */
/* bool */
#ifdef STLSOFT_CF_NATIVE_BOOL_SUPPORT
typedef bool ss_bool_pr_t_;
#else /* ? STLSOFT_CF_NATIVE_BOOL_SUPPORT */
typedef unsigned int ss_bool_pr_t_;
#endif /* STLSOFT_CF_NATIVE_BOOL_SUPPORT */
#endif /* !STLSOFT_DOCUMENTATION_SKIP_SECTION */
/* Type definitions - proper */
typedef char ss_char_a_t; /*!< \brief Ansi char type */
typedef ss_char_w_pr_t_ ss_char_w_t; /*!< \brief Unicode char type */
typedef ss_int8_pr_t_ ss_int8_t; /*!< \brief 8-bit integer */
typedef ss_sint8_pr_t_ ss_sint8_t; /*!< \brief 8-bit signed integer */
typedef ss_uint8_pr_t_ ss_uint8_t; /*!< \brief 8-bit unsigned integer */
typedef ss_int16_pr_t_ ss_int16_t; /*!< \brief 16-bit integer */
typedef ss_sint16_pr_t_ ss_sint16_t; /*!< \brief 16-bit signed integer */
typedef ss_uint16_pr_t_ ss_uint16_t; /*!< \brief 16-bit unsigned integer */
typedef ss_int32_pr_t_ ss_int32_t; /*!< \brief 32-bit integer */
typedef ss_sint32_pr_t_ ss_sint32_t; /*!< \brief 32-bit signed integer */
typedef ss_uint32_pr_t_ ss_uint32_t; /*!< \brief 32-bit unsigned integer */
#ifdef STLSOFT_CF_64BIT_INT_SUPPORT
typedef ss_int64_pr_t_ ss_int64_t; /*!< \brief 64-bit integer */
typedef ss_sint64_pr_t_ ss_sint64_t; /*!< \brief 64-bit signed integer */
typedef ss_uint64_pr_t_ ss_uint64_t; /*!< \brief 64-bit unsigned integer */
#endif /* STLSOFT_CF_64BIT_INT_SUPPORT */
typedef short ss_short_t; /*!< \brief short integer */
typedef int ss_int_t; /*!< \brief integer */
typedef signed int ss_sint_t; /*!< \brief signed integer */
typedef unsigned int ss_uint_t; /*!< \brief unsigned integer */
typedef long ss_long_t; /*!< \brief long integer */
typedef ss_uint8_t ss_byte_t; /*!< \brief Byte */
#if defined(__cplusplus)
typedef ss_bool_pr_t_ ss_bool_t; /*!< \brief bool */
#endif /* __cplusplus */
typedef ss_size_pr_t_ ss_size_t; /*!< \brief size */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -