⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stlsoft.h

📁 用STL的方式封装了WindowsAPI、COM调用、ACE、ATL、MFC、WTL等多种组件
💻 H
📖 第 1 页 / 共 5 页
字号:
 */
#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 + -