/*
*
* Copyright (c) 1998-2002
- * Dr John Maddock
+ * John Maddock
*
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation. Dr John Maddock makes no representations
- * about the suitability of this software for any purpose.
- * It is provided "as is" without express or implied warranty.
+ * Use, modification and distribution are subject to the
+ * Boost Software License, Version 1.0. (See accompanying file
+ * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
*
*/
-
+
/*
* LOCATION: see http://www.boost.org for most recent version.
* FILE config.hpp
#ifndef BOOST_REGEX_CONFIG_HPP
#define BOOST_REGEX_CONFIG_HPP
-//
-// Borland C++ Fix/error check
-// this has to go *before* we include any std lib headers:
-//
+/*
+ * Borland C++ Fix/error check
+ * this has to go *before* we include any std lib headers:
+ */
#if defined(__BORLANDC__)
-# if (__BORLANDC__ == 0x550) || (__BORLANDC__ == 0x551)
- // problems with std::basic_string and dll RTL:
-# if defined(_RTLDLL) && defined(_RWSTD_COMPILE_INSTANTIATE)
-# ifdef BOOST_REGEX_BUILD_DLL
-# error _RWSTD_COMPILE_INSTANTIATE must not be defined when building regex++ as a DLL
-# else
-# pragma message("Defining _RWSTD_COMPILE_INSTANTIATE when linking to the DLL version of the RTL may produce memory corruption problems in std::basic_string, as a result of separate versions of basic_string's static data in the RTL and you're exe/dll: be warned!!")
-# endif
-# endif
-# ifndef _RTLDLL
- // this is harmless for a staic link:
-# define _RWSTD_COMPILE_INSTANTIATE
-# endif
-# endif
-# if (__BORLANDC__ <= 0x540) && !defined(BOOST_REGEX_NO_LIB) && !defined(_NO_VCL)
- // C++ Builder 4 and earlier, we can't tell whether we should be using
- // the VCL runtime or not, do a static link instead:
-# define BOOST_REGEX_STATIC_LINK
-# endif
- //
- // VCL support:
- // if we're building a console app then there can't be any VCL (can there?)
-# if !defined(__CONSOLE__) && !defined(_NO_VCL)
-# define BOOST_REGEX_USE_VCL
-# endif
- //
- // if this isn't Win32 then don't automatically select link
- // libraries:
- //
-# ifndef _Windows
-# ifndef BOOST_REGEX_NO_LIB
-# define BOOST_REGEX_NO_LIB
-# endif
-# ifndef BOOST_REGEX_STATIC_LINK
-# define BOOST_REGEX_STATIC_LINK
-# endif
-# endif
-
+# include <boost/regex/config/borland.hpp>
#endif
/*****************************************************************************
# include BOOST_REGEX_USER_CONFIG
-# include <cstdlib>
-# include <cstddef>
-# include <cstring>
-# include <cctype>
-# include <cstdio>
-# include <clocale>
-# include <cassert>
-# include <string>
-# include <stdexcept>
-# include <iterator>
# include <boost/config.hpp>
-# include <boost/cstdint.hpp>
-# include <boost/detail/allocator.hpp>
+
#else
- //
- // C build,
- // don't include <boost/config.hpp> because that may
- // do C++ specific things in future...
- //
+ /*
+ * C build,
+ * don't include <boost/config.hpp> because that may
+ * do C++ specific things in future...
+ */
# include <stdlib.h>
# include <stddef.h>
# ifdef _MSC_VER
/* Obsolete macro, use BOOST_VERSION instead: */
#define BOOST_RE_VERSION 320
-// fix:
+/* fix: */
#if defined(_UNICODE) && !defined(UNICODE)
#define UNICODE
#endif
-//
-// If there isn't good enough wide character support then there will
-// be no wide character regular expressions:
-//
+/*
+ * Fix for gcc prior to 3.4: std::ctype<wchar_t> doesn't allow
+ * masks to be combined, for example:
+ * std::use_facet<std::ctype<wchar_t> >.is(std::ctype_base::lower|std::ctype_base::upper, L'a');
+ * returns *false*.
+ */
+#ifdef __GLIBCPP__
+# define BOOST_REGEX_BUGGY_CTYPE_FACET
+#endif
+
+/*
+ * Intel C++ before 8.0 ends up with unresolved externals unless we turn off
+ * extern template support:
+ */
+#if defined(BOOST_INTEL) && defined(__cplusplus) && (BOOST_INTEL <= 800)
+# define BOOST_REGEX_NO_EXTERNAL_TEMPLATES
+#endif
+/*
+ * Visual C++ doesn't support external templates with C++ extensions turned off:
+ */
+#if defined(_MSC_VER) && !defined(_MSC_EXTENSIONS)
+# define BOOST_REGEX_NO_EXTERNAL_TEMPLATES
+#endif
+/*
+ * Shared regex lib will crash without this, frankly it looks a lot like a gcc bug:
+ */
+#if defined(__MINGW32__)
+# define BOOST_REGEX_NO_EXTERNAL_TEMPLATES
+#endif
+
+/*
+ * If there isn't good enough wide character support then there will
+ * be no wide character regular expressions:
+ */
#if (defined(BOOST_NO_CWCHAR) || defined(BOOST_NO_CWCTYPE) || defined(BOOST_NO_STD_WSTRING))
# if !defined(BOOST_NO_WREGEX)
# define BOOST_NO_WREGEX
# endif
#else
-# if defined(__sgi) && defined(__SGI_STL_PORT)
- // STLPort on IRIX is misconfigured: <cwctype> does not compile
- // as a temporary fix include <wctype.h> instead and prevent inclusion
- // of STLPort version of <cwctype>
+# if defined(__sgi) && (defined(__SGI_STL_PORT) || defined(_STLPORT_VERSION))
+ /* STLPort on IRIX is misconfigured: <cwctype> does not compile
+ * as a temporary fix include <wctype.h> instead and prevent inclusion
+ * of STLPort version of <cwctype> */
# include <wctype.h>
# define __STLPORT_CWCTYPE
# define _STLP_CWCTYPE
# endif
#ifdef __cplusplus
-# include <cwchar>
-# include <cwctype>
+# include <boost/regex/config/cwchar.hpp>
#endif
#endif
-//
-// If Win32 support has been disabled for boost in general, then
-// it is for regex in particular:
-//
-#ifdef BOOST_DISABLE_WIN32
+/*
+ * If Win32 support has been disabled for boost in general, then
+ * it is for regex in particular:
+ */
+#if defined(BOOST_DISABLE_WIN32) && !defined(BOOST_REGEX_NO_W32)
# define BOOST_REGEX_NO_W32
#endif
-// some versions of gcc can't merge template instances:
-#if defined(__CYGWIN__)
-# define BOOST_REGEX_NO_TEMPLATE_SWITCH_MERGE
-#endif
-
-// fix problems with bool as a macro,
-// this probably doesn't affect any current compilers:
-#if defined(bool) || defined(true) || defined(false)
-# define BOOST_REGEX_NO_BOOL
-#endif
-
-// We don't make our templates external if the compiler
-// can't handle it:
-#if (defined(BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS) || defined(__HP_aCC) || defined(__MWERKS__) || defined(__COMO__) || defined(__ICL) || defined(__ICC))\
- && !defined(BOOST_MSVC) && !defined(__BORLANDC__)
-# define BOOST_REGEX_NO_EXTERNAL_TEMPLATES
-#endif
-
-// disable our own file-iterators and mapfiles if we can't
-// support them:
+/* disable our own file-iterators and mapfiles if we can't
+ * support them: */
#if !defined(BOOST_HAS_DIRENT_H) && !(defined(_WIN32) && !defined(BOOST_REGEX_NO_W32))
# define BOOST_REGEX_NO_FILEITER
#endif
-#ifdef __cplusplus
-#ifndef MB_CUR_MAX
-// yuk!
-// better make a conservative guess!
-#define MB_CUR_MAX 10
-#endif
-
-namespace boost{ namespace re_detail{
-#ifdef BOOST_NO_STD_DISTANCE
-template <class T>
-std::ptrdiff_t distance(const T& x, const T& y)
-{ return y - x; }
-#else
-using std::distance;
-#endif
-}}
-
-
-#ifdef BOOST_REGEX_NO_BOOL
-# define BOOST_REGEX_MAKE_BOOL(x) static_cast<bool>((x) ? true : false)
-#else
-# ifdef BOOST_MSVC
- // warning suppression with VC6:
-# pragma warning(disable: 4800)
-# endif
-# define BOOST_REGEX_MAKE_BOOL(x) static_cast<bool>(x)
-#endif
-#endif // __cplusplus
-
-// backwards compatibitity:
+/* backwards compatibitity: */
#if defined(BOOST_RE_NO_LIB)
# define BOOST_REGEX_NO_LIB
#endif
#if defined(__GNUC__) && (defined(_WIN32) || defined(__CYGWIN__))
-// gcc on win32 has problems merging switch statements in templates:
-# define BOOST_REGEX_NO_TEMPLATE_SWITCH_MERGE
-// gcc on win32 has problems if you include <windows.h>
-// (sporadically generates bad code).
-# define BOOST_REGEX_USE_C_LOCALE
+/* gcc on win32 has problems if you include <windows.h>
+ (sporadically generates bad code). */
+# define BOOST_REGEX_NO_W32
+#endif
+#if defined(__COMO__) && !defined(BOOST_REGEX_NO_W32) && !defined(_MSC_EXTENSIONS)
# define BOOST_REGEX_NO_W32
#endif
-
/*****************************************************************************
*
- * Set up dll import/export options:
+ * Wide character workarounds:
*
****************************************************************************/
-// backwards compatibility:
-#ifdef BOOST_RE_STATIC_LIB
-# define BOOST_REGEX_STATIC_LINK
-#endif
-
-#if defined(BOOST_MSVC) && defined(_DLL)
-# define BOOST_REGEX_HAS_DLL_RUNTIME
+/*
+ * define BOOST_REGEX_HAS_OTHER_WCHAR_T when wchar_t is a native type, but the users
+ * code may be built with wchar_t as unsigned short: basically when we're building
+ * with MSVC and the /Zc:wchar_t option we place some extra unsigned short versions
+ * of the non-inline functions in the library, so that users can still link to the lib,
+ * irrespective of whether their own code is built with /Zc:wchar_t.
+ */
+#if defined(__cplusplus) && (defined(BOOST_MSVC) || defined(__ICL)) && !defined(BOOST_NO_INTRINSIC_WCHAR_T) && defined(BOOST_WINDOWS) && !defined(__SGI_STL_PORT) && !defined(_STLPORT_VERSION) && !defined(BOOST_RWSTD_VER)
+# define BOOST_REGEX_HAS_OTHER_WCHAR_T
+# ifdef BOOST_MSVC
+# pragma warning(push)
+# pragma warning(disable : 4251 4231 4660)
+# endif
+# if defined(_DLL) && defined(BOOST_MSVC) && (BOOST_MSVC < 1600)
+# include <string>
+ extern template class __declspec(dllimport) std::basic_string<unsigned short>;
+# endif
+# ifdef BOOST_MSVC
+# pragma warning(pop)
+# endif
#endif
-#if defined(__BORLANDC__) && defined(_RTLDLL)
-# define BOOST_REGEX_HAS_DLL_RUNTIME
-#endif
-#if defined(__ICL) && defined(_DLL)
-# define BOOST_REGEX_HAS_DLL_RUNTIME
-#endif
+/*****************************************************************************
+ *
+ * Set up dll import/export options:
+ *
+ ****************************************************************************/
-#if defined(BOOST_REGEX_HAS_DLL_RUNTIME) && !defined(BOOST_REGEX_STATIC_LINK)
+#if defined(BOOST_HAS_DECLSPEC) && (defined(BOOST_REGEX_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)) && !defined(BOOST_REGEX_STATIC_LINK)
# if defined(BOOST_REGEX_SOURCE)
# define BOOST_REGEX_DECL __declspec(dllexport)
# define BOOST_REGEX_BUILD_DLL
#ifndef BOOST_REGEX_DECL
# define BOOST_REGEX_DECL
#endif
-
-#if (defined(BOOST_MSVC) || defined(__BORLANDC__)) && !defined(BOOST_REGEX_NO_LIB) && !defined(BOOST_REGEX_SOURCE)
-# include <boost/regex/v3/regex_library_include.hpp>
+
+#if !defined(BOOST_REGEX_NO_LIB) && !defined(BOOST_REGEX_SOURCE) && !defined(BOOST_ALL_NO_LIB) && defined(__cplusplus)
+# define BOOST_LIB_NAME boost_regex
+# if defined(BOOST_REGEX_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)
+# define BOOST_DYN_LINK
+# endif
+# ifdef BOOST_REGEX_DIAG
+# define BOOST_LIB_DIAGNOSTIC
+# endif
+# include <boost/config/auto_link.hpp>
#endif
/*****************************************************************************
*
****************************************************************************/
-#if defined(BOOST_MSVC) || defined(__ICL)
-# if defined(_DEBUG)
-# define BOOST_REGEX_CALL __cdecl
-# else
-# define BOOST_REGEX_CALL __fastcall
-# endif
-# define BOOST_REGEX_CCALL __stdcall
+#if defined(BOOST_MSVC) && (BOOST_MSVC >= 1200) && defined(_MSC_EXTENSIONS)
+#if defined(_DEBUG) || defined(__MSVC_RUNTIME_CHECKS) || defined(_MANAGED)
+# define BOOST_REGEX_CALL __cdecl
+#else
+# define BOOST_REGEX_CALL __fastcall
+#endif
+# define BOOST_REGEX_CCALL __cdecl
#endif
-#if defined(__BORLANDC__)
+#if defined(__BORLANDC__) && !defined(BOOST_DISABLE_WIN32)
# define BOOST_REGEX_CALL __fastcall
# define BOOST_REGEX_CCALL __stdcall
#endif
*
****************************************************************************/
-// backwards compatibility:
+/* backwards compatibility: */
#ifdef BOOST_RE_LOCALE_C
# define BOOST_REGEX_USE_C_LOCALE
#endif
# define BOOST_REGEX_USE_CPP_LOCALE
#endif
-// Win32 defaults to native Win32 locale:
+/* Win32 defaults to native Win32 locale: */
#if defined(_WIN32) && !defined(BOOST_REGEX_USE_WIN32_LOCALE) && !defined(BOOST_REGEX_USE_C_LOCALE) && !defined(BOOST_REGEX_USE_CPP_LOCALE) && !defined(BOOST_REGEX_NO_W32)
# define BOOST_REGEX_USE_WIN32_LOCALE
#endif
-// otherwise use C locale:
+/* otherwise use C++ locale if supported: */
+#if !defined(BOOST_REGEX_USE_WIN32_LOCALE) && !defined(BOOST_REGEX_USE_C_LOCALE) && !defined(BOOST_REGEX_USE_CPP_LOCALE) && !defined(BOOST_NO_STD_LOCALE)
+# define BOOST_REGEX_USE_CPP_LOCALE
+#endif
+/* otherwise use C+ locale: */
#if !defined(BOOST_REGEX_USE_WIN32_LOCALE) && !defined(BOOST_REGEX_USE_C_LOCALE) && !defined(BOOST_REGEX_USE_CPP_LOCALE)
# define BOOST_REGEX_USE_C_LOCALE
#endif
-#if defined(_WIN32) && !defined(BOOST_REGEX_NO_W32)
-# include <windows.h>
-#endif
-
-#ifdef MAXPATH
-# define BOOST_REGEX_MAX_PATH MAXPATH
-#elif defined(MAX_PATH)
-# define BOOST_REGEX_MAX_PATH MAX_PATH
-#elif defined(FILENAME_MAX)
-# define BOOST_REGEX_MAX_PATH FILENAME_MAX
-#else
-# define BOOST_REGEX_MAX_PATH 200
+#ifndef BOOST_REGEX_MAX_STATE_COUNT
+# define BOOST_REGEX_MAX_STATE_COUNT 100000000
#endif
-
/*****************************************************************************
*
* Error Handling for exception free compilers:
****************************************************************************/
#ifdef BOOST_NO_EXCEPTIONS
-//
-// If there are no exceptions then we must report critical-errors
-// the only way we know how; by terminating.
-//
-#ifdef __BORLANDC__
-// <cstdio> seems not to make stderr usable with Borland:
-#include <stdio.h>
-#endif
+/*
+ * If there are no exceptions then we must report critical-errors
+ * the only way we know how; by terminating.
+ */
+#include <stdexcept>
+#include <string>
+#include <boost/throw_exception.hpp>
+
# define BOOST_REGEX_NOEH_ASSERT(x)\
if(0 == (x))\
{\
- std::fprintf(stderr, "Error: critical regex++ failure in \"%s\"", #x);\
- std::abort();\
+ std::string s("Error: critical regex++ failure in: ");\
+ s.append(#x);\
+ std::runtime_error e(s);\
+ boost::throw_exception(e);\
}
#else
-//
-// With exceptions then error handling is taken care of and
-// there is no need for these checks:
-//
+/*
+ * With exceptions then error handling is taken care of and
+ * there is no need for these checks:
+ */
# define BOOST_REGEX_NOEH_ASSERT(x)
#endif
+
/*****************************************************************************
*
- * Debugging / tracing support:
+ * Stack protection under MS Windows:
*
****************************************************************************/
-#if defined(BOOST_REGEX_DEBUG) && defined(__cplusplus)
-
-# include <iostream>
-using std::cout;
-using std::cin;
-using std::cerr;
-using std::endl;
-using std::hex;
-using std::dec;
-
-# ifndef jm_assert
-# define jm_assert(x) assert(x)
-# endif
-# ifndef jm_trace
-# define jm_trace(x) cerr << x << endl;
-# endif
-# ifndef jm_instrument
-# define jm_instrument jm_trace(__FILE__<<"#"<<__LINE__)
+#if !defined(BOOST_REGEX_NO_W32) && !defined(BOOST_REGEX_V3)
+# if(defined(_WIN32) || defined(_WIN64) || defined(_WINCE)) \
+ && !defined(__GNUC__) \
+ && !(defined(__BORLANDC__) && (__BORLANDC__ >= 0x600)) \
+ && !(defined(__MWERKS__) && (__MWERKS__ <= 0x3003))
+# define BOOST_REGEX_HAS_MS_STACK_GUARD
# endif
+#elif defined(BOOST_REGEX_HAS_MS_STACK_GUARD)
+# undef BOOST_REGEX_HAS_MS_STACK_GUARD
+#endif
+
+#if defined(__cplusplus) && defined(BOOST_REGEX_HAS_MS_STACK_GUARD)
namespace boost{
- namespace re_detail{
-class debug_guard
-{
-public:
- char g1[32];
- const char* pc;
- char* pnc;
- const char* file;
- int line;
- char g2[32];
- debug_guard(const char* f, int l, const char* p1 = 0, char* p2 = 0);
- ~debug_guard();
-};
-
-# define BOOST_RE_GUARD_STACK boost::re_detail::debug_guard sg(__FILE__, __LINE__);
-# define BOOST_RE_GUARD_GLOBAL(x) const char g1##x[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, }; char g2##x[32]; boost::debug_guard g3##x(__FILE__, __LINE__, g1##x, g2##x);
-
- } // namespace re_detail
-} // namespace boost
+namespace re_detail{
-#else
+BOOST_REGEX_DECL void BOOST_REGEX_CALL reset_stack_guard_page();
+
+}
+}
-# define jm_assert(x)
-# define jm_trace(x)
-# define BOOST_RE_GUARD_STACK
-# define BOOST_RE_GUARD_GLOBAL(x)
-# ifndef jm_instrument
-# define jm_instrument
-# endif
#endif
+
/*****************************************************************************
*
- * Fix broken compilers that wrongly #define some symbols:
+ * Algorithm selection and configuration:
*
****************************************************************************/
-#ifdef __cplusplus
-
-#ifdef BOOST_NO_CTYPE_FUNCTIONS
-
-// Make functions out of the macros.
-// Use parentheses so the macros don't screw us up.
-inline int (isalpha)(int c) { return isalpha(c); }
-inline int (iscntrl)(int c) { return iscntrl(c); }
-inline int (isdigit)(int c) { return isdigit(c); }
-inline int (islower)(int c) { return islower(c); }
-inline int (ispunct)(int c) { return ispunct(c); }
-inline int (isspace)(int c) { return isspace(c); }
-inline int (isupper)(int c) { return isupper(c); }
-inline int (isxdigit)(int c) { return isxdigit(c); }
-
-#endif
-
-// the following may be defined as macros; this is
-// incompatable with std::something syntax, we have
-// no choice but to undef them?
-
-#ifdef memcpy
-#undef memcpy
-#endif
-#ifdef memmove
-#undef memmove
-#endif
-#ifdef memset
-#undef memset
-#endif
-#ifdef sprintf
-#undef sprintf
-#endif
-#ifdef strcat
-#undef strcat
-#endif
-#ifdef strcmp
-#undef strcmp
-#endif
-#ifdef strcpy
-#undef strcpy
-#endif
-#ifdef strlen
-#undef strlen
-#endif
-#ifdef swprintf
-#undef swprintf
-#endif
-#ifdef wcslen
-#undef wcslen
-#endif
-#ifdef wcscpy
-#undef wcscpy
-#endif
-#ifdef wcscmp
-#undef wcscmp
-#endif
-#ifdef isalpha
-#undef isalpha
-#endif
-#ifdef iscntrl
-#undef iscntrl
-#endif
-#ifdef isdigit
-#undef isdigit
-#endif
-#ifdef islower
-#undef islower
-#endif
-#ifdef isupper
-#undef isupper
-#endif
-#ifdef ispunct
-#undef ispunct
-#endif
-#ifdef isspace
-#undef isspace
-#endif
-#ifdef isxdigit
-#undef isxdigit
+#if !defined(BOOST_REGEX_RECURSIVE) && !defined(BOOST_REGEX_NON_RECURSIVE)
+# if defined(BOOST_REGEX_HAS_MS_STACK_GUARD) && !defined(_STLP_DEBUG) && !defined(__STL_DEBUG) && !(defined(BOOST_MSVC) && (BOOST_MSVC >= 1400))
+# define BOOST_REGEX_RECURSIVE
+# else
+# define BOOST_REGEX_NON_RECURSIVE
+# endif
#endif
-#ifdef tolower
-#undef tolower
-#endif
-#ifdef iswalpha
-#undef iswalpha
-#endif
-#ifdef iswcntrl
-#undef iswcntrl
-#endif
-#ifdef iswdigit
-#undef iswdigit
-#endif
-#ifdef iswlower
-#undef iswlower
-#endif
-#ifdef iswpunct
-#undef iswpunct
-#endif
-#ifdef iswspace
-#undef iswspace
-#endif
-#ifdef iswupper
-#undef iswupper
-#endif
-#ifdef iswxdigit
-#undef iswxdigit
-#endif
-#ifdef towlower
-#undef towlower
-#endif
-#ifdef wcsxfrm
-#undef wcsxfrm
+#ifdef BOOST_REGEX_NON_RECURSIVE
+# ifdef BOOST_REGEX_RECURSIVE
+# error "Can't set both BOOST_REGEX_RECURSIVE and BOOST_REGEX_NON_RECURSIVE"
+# endif
+# ifndef BOOST_REGEX_BLOCKSIZE
+# define BOOST_REGEX_BLOCKSIZE 4096
+# endif
+# if BOOST_REGEX_BLOCKSIZE < 512
+# error "BOOST_REGEX_BLOCKSIZE must be at least 512"
+# endif
+# ifndef BOOST_REGEX_MAX_BLOCKS
+# define BOOST_REGEX_MAX_BLOCKS 1024
+# endif
+# ifdef BOOST_REGEX_HAS_MS_STACK_GUARD
+# undef BOOST_REGEX_HAS_MS_STACK_GUARD
+# endif
+# ifndef BOOST_REGEX_MAX_CACHE_BLOCKS
+# define BOOST_REGEX_MAX_CACHE_BLOCKS 16
+# endif
#endif
-#endif
/*****************************************************************************
*
- * Fix broken broken namespace support:
+ * helper memory allocation functions:
*
****************************************************************************/
-#if defined(BOOST_NO_STDC_NAMESPACE) && defined(__cplusplus)
-
-namespace std{
- using ::ptrdiff_t;
- using ::size_t;
- using ::memcpy;
- using ::memmove;
- using ::memset;
- using ::memcmp;
- using ::sprintf;
- using ::strcat;
- using ::strcmp;
- using ::strcpy;
- using ::strlen;
- using ::strxfrm;
- using ::isalpha;
- using ::iscntrl;
- using ::isdigit;
- using ::islower;
- using ::isupper;
- using ::ispunct;
- using ::isspace;
- using ::isxdigit;
- using ::tolower;
- using ::abs;
- using ::setlocale;
-# ifndef BOOST_NO_WREGEX
-# ifndef BOOST_NO_SWPRINTF
- using ::swprintf;
-# endif
- using ::wcslen;
- using ::wcscpy;
- using ::wcscmp;
- using ::iswalpha;
- using ::iswcntrl;
- using ::iswdigit;
- using ::iswlower;
- using ::iswpunct;
- using ::iswspace;
- using ::iswupper;
- using ::iswxdigit;
- using ::towlower;
- using ::wcsxfrm;
- using ::wcstombs;
- using ::mbstowcs;
-# if !defined(BOOST_NO_STD_LOCALE) && !defined (__STL_NO_NATIVE_MBSTATE_T) && !defined(_STLP_NO_NATIVE_MBSTATE_T)
- using ::mbstate_t;
-# endif
-# endif // BOOST_NO_WREGEX
- using ::fseek;
- using ::fread;
- using ::ftell;
- using ::fopen;
- using ::fclose;
- using ::FILE;
-#ifdef BOOST_NO_EXCEPTIONS
- using ::fprintf;
- using ::abort;
-#endif
-}
+#if defined(__cplusplus) && defined(BOOST_REGEX_NON_RECURSIVE)
+namespace boost{ namespace re_detail{
+BOOST_REGEX_DECL void* BOOST_REGEX_CALL get_mem_block();
+BOOST_REGEX_DECL void BOOST_REGEX_CALL put_mem_block(void*);
+
+}} /* namespaces */
#endif
/*****************************************************************************
*
- * helper functions pointer_construct/pointer_destroy:
+ * Diagnostics:
*
****************************************************************************/
-#ifdef __cplusplus
-namespace boost{ namespace re_detail{
-
-#ifdef BOOST_MSVC
-#pragma warning (push)
-#pragma warning (disable : 4100)
+#ifdef BOOST_REGEX_CONFIG_INFO
+BOOST_REGEX_DECL void BOOST_REGEX_CALL print_regex_library_info();
#endif
-template <class T>
-inline void pointer_destroy(T* p)
-{ p->~T(); (void)p; }
-
-#ifdef BOOST_MSVC
-#pragma warning (pop)
+#if defined(BOOST_REGEX_DIAG)
+# pragma message ("BOOST_REGEX_DECL" BOOST_STRINGIZE(=BOOST_REGEX_DECL))
+# pragma message ("BOOST_REGEX_CALL" BOOST_STRINGIZE(=BOOST_REGEX_CALL))
+# pragma message ("BOOST_REGEX_CCALL" BOOST_STRINGIZE(=BOOST_REGEX_CCALL))
+#ifdef BOOST_REGEX_USE_C_LOCALE
+# pragma message ("Using C locale in regex traits class")
+#elif BOOST_REGEX_USE_CPP_LOCALE
+# pragma message ("Using C++ locale in regex traits class")
+#else
+# pragma message ("Using Win32 locale in regex traits class")
#endif
-
-template <class T>
-inline void pointer_construct(T* p, const T& t)
-{ new (p) T(t); }
-
-}} // namespaces
+#if defined(BOOST_REGEX_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)
+# pragma message ("Dynamic linking enabled")
#endif
-
+#if defined(BOOST_REGEX_NO_LIB) || defined(BOOST_ALL_NO_LIB)
+# pragma message ("Auto-linking disabled")
+#endif
+#ifdef BOOST_REGEX_NO_EXTERNAL_TEMPLATES
+# pragma message ("Extern templates disabled")
#endif
+#endif
-
-
-
+#endif