-
Notifications
You must be signed in to change notification settings - Fork 479
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
PS-9233: date_time Boost headers to supoort uuid_vx component
https://perconadev.atlassian.net/browse/PS-9233 date_time/c_time.hpp header and dependencies is from version 1.84
- Loading branch information
1 parent
a1fef5f
commit a28a309
Showing
3 changed files
with
298 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
#ifndef DATE_TIME_C_TIME_HPP___ | ||
#define DATE_TIME_C_TIME_HPP___ | ||
|
||
/* Copyright (c) 2002,2003,2005 CrystalClear Software, Inc. | ||
* Use, modification and distribution is subject to the | ||
* Boost Software License, Version 1.0. (See accompanying | ||
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) | ||
* Author: Jeff Garland, Bart Garst | ||
* $Date$ | ||
*/ | ||
|
||
|
||
/*! @file c_time.hpp | ||
Provide workarounds related to the ctime header | ||
*/ | ||
|
||
#include <ctime> | ||
#include <string> // to be able to convert from string literals to exceptions | ||
#include <stdexcept> | ||
#include <boost/throw_exception.hpp> | ||
#include <boost/date_time/compiler_config.hpp> | ||
|
||
//Work around libraries that don't put time_t and time in namespace std | ||
#ifdef BOOST_NO_STDC_NAMESPACE | ||
namespace std { using ::time_t; using ::time; using ::localtime; | ||
using ::tm; using ::gmtime; } | ||
#endif // BOOST_NO_STDC_NAMESPACE | ||
|
||
//The following is used to support high precision time clocks | ||
#ifdef BOOST_HAS_GETTIMEOFDAY | ||
#include <sys/time.h> | ||
#endif | ||
|
||
#ifdef BOOST_HAS_FTIME | ||
#include <time.h> | ||
#endif | ||
|
||
namespace boost { | ||
namespace date_time { | ||
//! Provides a uniform interface to some 'ctime' functions | ||
/*! Provides a uniform interface to some ctime functions and | ||
* their '_r' counterparts. The '_r' functions require a pointer to a | ||
* user created std::tm struct whereas the regular functions use a | ||
* staticly created struct and return a pointer to that. These wrapper | ||
* functions require the user to create a std::tm struct and send in a | ||
* pointer to it. This struct may be used to store the resulting time. | ||
* The returned pointer may or may not point to this struct, however, | ||
* it will point to the result of the corresponding function. | ||
* All functions do proper checking of the C function results and throw | ||
* exceptions on error. Therefore the functions will never return NULL. | ||
*/ | ||
struct c_time { | ||
public: | ||
#if defined(BOOST_DATE_TIME_HAS_REENTRANT_STD_FUNCTIONS) | ||
//! requires a pointer to a user created std::tm struct | ||
inline | ||
static std::tm* localtime(const std::time_t* t, std::tm* result) | ||
{ | ||
// localtime_r() not in namespace std??? | ||
#if defined(__VMS) && __INITIAL_POINTER_SIZE == 64 | ||
std::tm tmp; | ||
if(!localtime_r(t,&tmp)) | ||
result = 0; | ||
else | ||
*result = tmp; | ||
#else | ||
result = localtime_r(t, result); | ||
#endif | ||
if (!result) | ||
boost::throw_exception(std::runtime_error("could not convert calendar time to local time")); | ||
return result; | ||
} | ||
//! requires a pointer to a user created std::tm struct | ||
inline | ||
static std::tm* gmtime(const std::time_t* t, std::tm* result) | ||
{ | ||
// gmtime_r() not in namespace std??? | ||
#if defined(__VMS) && __INITIAL_POINTER_SIZE == 64 | ||
std::tm tmp; | ||
if(!gmtime_r(t,&tmp)) | ||
result = 0; | ||
else | ||
*result = tmp; | ||
#else | ||
result = gmtime_r(t, result); | ||
#endif | ||
if (!result) | ||
boost::throw_exception(std::runtime_error("could not convert calendar time to UTC time")); | ||
return result; | ||
} | ||
#else // BOOST_DATE_TIME_HAS_REENTRANT_STD_FUNCTIONS | ||
|
||
#if defined(__clang__) // Clang has to be checked before MSVC | ||
#pragma clang diagnostic push | ||
#pragma clang diagnostic ignored "-Wdeprecated-declarations" | ||
#elif (defined(_MSC_VER) && (_MSC_VER >= 1400)) | ||
#pragma warning(push) // preserve warning settings | ||
#pragma warning(disable : 4996) // disable depricated localtime/gmtime warning on vc8 | ||
#endif | ||
//! requires a pointer to a user created std::tm struct | ||
inline | ||
static std::tm* localtime(const std::time_t* t, std::tm* result) | ||
{ | ||
result = std::localtime(t); | ||
if (!result) | ||
boost::throw_exception(std::runtime_error("could not convert calendar time to local time")); | ||
return result; | ||
} | ||
//! requires a pointer to a user created std::tm struct | ||
inline | ||
static std::tm* gmtime(const std::time_t* t, std::tm* result) | ||
{ | ||
result = std::gmtime(t); | ||
if (!result) | ||
boost::throw_exception(std::runtime_error("could not convert calendar time to UTC time")); | ||
return result; | ||
} | ||
#if defined(__clang__) // Clang has to be checked before MSVC | ||
#pragma clang diagnostic pop | ||
#elif (defined(_MSC_VER) && (_MSC_VER >= 1400)) | ||
#pragma warning(pop) // restore warnings to previous state | ||
#endif | ||
|
||
#endif // BOOST_DATE_TIME_HAS_REENTRANT_STD_FUNCTIONS | ||
}; | ||
}} // namespaces | ||
|
||
#endif // DATE_TIME_C_TIME_HPP___ |
137 changes: 137 additions & 0 deletions
137
extra/boost/boost_1_84_0/boost/date_time/compiler_config.hpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,137 @@ | ||
#ifndef DATE_TIME_COMPILER_CONFIG_HPP___ | ||
#define DATE_TIME_COMPILER_CONFIG_HPP___ | ||
|
||
/* Copyright (c) 2002-2004 CrystalClear Software, Inc. | ||
* Subject to the Boost Software License, Version 1.0. (See accompanying | ||
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) | ||
* Author: Jeff Garland, Bart Garst | ||
* $Date$ | ||
*/ | ||
|
||
#include <cstdlib> | ||
#include <boost/config.hpp> | ||
#include <boost/detail/workaround.hpp> | ||
|
||
|
||
// This file performs some local compiler configurations | ||
|
||
#include <boost/date_time/locale_config.hpp> //set up locale configurations | ||
|
||
//Set up a configuration parameter for platforms that have | ||
//GetTimeOfDay | ||
#if defined(BOOST_HAS_GETTIMEOFDAY) || defined(BOOST_HAS_FTIME) | ||
#define BOOST_DATE_TIME_HAS_HIGH_PRECISION_CLOCK | ||
#endif | ||
|
||
// To Force no default constructors for date & ptime, un-comment following | ||
//#define DATE_TIME_NO_DEFAULT_CONSTRUCTOR | ||
|
||
// Include extensions to date_duration - comment out to remove this feature | ||
#define BOOST_DATE_TIME_OPTIONAL_GREGORIAN_TYPES | ||
|
||
#if (defined(BOOST_NO_INCLASS_MEMBER_INITIALIZATION) || BOOST_WORKAROUND( BOOST_BORLANDC, BOOST_TESTED_AT(0x581) ) ) | ||
#define BOOST_DATE_TIME_NO_MEMBER_INIT | ||
#endif | ||
|
||
// include these types before we try to re-define them | ||
#include <boost/cstdint.hpp> | ||
|
||
//Define INT64_C for compilers that don't have it | ||
#if (!defined(INT64_C)) | ||
#define INT64_C(value) int64_t(value) | ||
#endif | ||
|
||
|
||
/* Workaround for Borland iterator error. Error was "Cannot convert 'istream *' to 'wistream *' in function istream_iterator<>::istream_iterator() */ | ||
#if defined(BOOST_BORLANDC) && defined(BOOST_BCB_WITH_RW_LIB) | ||
#define BOOST_DATE_TIME_NO_WISTREAM_ITERATOR | ||
#endif | ||
|
||
|
||
// Borland v5.64 does not have the following in std namespace; v5.5.1 does | ||
#if defined(BOOST_BORLANDC) && defined(BOOST_BCB_WITH_STLPORT) | ||
#include <locale> | ||
namespace std { | ||
using stlport::tolower; | ||
using stlport::ctype; | ||
using stlport::use_facet; | ||
} | ||
#endif | ||
|
||
// workaround for errors associated with output for date classes | ||
// modifications and input streaming for time classes. | ||
// Compilers affected are: | ||
// gcc295, msvc (neither with STLPort), any borland | ||
// | ||
#if (((defined(__GNUC__) && (__GNUC__ < 3)) || \ | ||
(defined(_MSC_VER) && (_MSC_VER < 1300)) ) && \ | ||
!defined(_STLP_OWN_IOSTREAMS) ) || \ | ||
BOOST_WORKAROUND( BOOST_BORLANDC, BOOST_TESTED_AT(0x581) ) | ||
#define BOOST_DATE_TIME_INCLUDE_LIMITED_HEADERS | ||
#endif | ||
|
||
// The macro marks up places where compiler complains for missing return statement or | ||
// uninitialized variables after calling to boost::throw_exception. | ||
// BOOST_UNREACHABLE_RETURN doesn't work since even compilers that support | ||
// unreachable statements detection emit such warnings. | ||
#if defined(_MSC_VER) | ||
// Use special MSVC extension to markup unreachable code | ||
# define BOOST_DATE_TIME_UNREACHABLE_EXPRESSION(x) __assume(false) | ||
#elif !defined(BOOST_NO_UNREACHABLE_RETURN_DETECTION) | ||
// Call to a non-returning function should suppress the warning | ||
# if defined(BOOST_NO_STDC_NAMESPACE) | ||
namespace std { | ||
using ::abort; | ||
} | ||
# endif // defined(BOOST_NO_STDC_NAMESPACE) | ||
# define BOOST_DATE_TIME_UNREACHABLE_EXPRESSION(x) std::abort() | ||
#else | ||
// For other poor compilers the specified expression is compiled. Usually, this would be a return statement. | ||
# define BOOST_DATE_TIME_UNREACHABLE_EXPRESSION(x) x | ||
#endif | ||
|
||
/* The following handles the definition of the necessary macros | ||
* for dll building on Win32 platforms. | ||
* | ||
* For code that will be placed in the date_time .dll, | ||
* it must be properly prefixed with BOOST_DATE_TIME_DECL. | ||
* The corresponding .cpp file must have BOOST_DATE_TIME_SOURCE | ||
* defined before including its header. For examples see: | ||
* greg_month.hpp & greg_month.cpp | ||
* | ||
*/ | ||
|
||
// we need to import/export our code only if the user has specifically | ||
// asked for it by defining either BOOST_ALL_DYN_LINK if they want all boost | ||
// libraries to be dynamically linked, or BOOST_DATE_TIME_DYN_LINK | ||
// if they want just this one to be dynamically liked: | ||
#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_DATE_TIME_DYN_LINK) | ||
// export if this is our own source, otherwise import: | ||
# ifdef BOOST_DATE_TIME_SOURCE | ||
# define BOOST_DATE_TIME_DECL BOOST_SYMBOL_EXPORT | ||
# else | ||
# define BOOST_DATE_TIME_DECL BOOST_SYMBOL_IMPORT | ||
# endif // BOOST_DATE_TIME_SOURCE | ||
#endif // DYN_LINK | ||
// | ||
// if BOOST_WHATEVER_DECL isn't defined yet define it now: | ||
#ifndef BOOST_DATE_TIME_DECL | ||
# define BOOST_DATE_TIME_DECL | ||
#endif | ||
|
||
|
||
#if defined(BOOST_HAS_THREADS) | ||
# if defined(_MSC_VER) || defined(__MWERKS__) || defined(__MINGW32__) || defined(__BORLANDC__) | ||
//no reentrant posix functions (eg: localtime_r) | ||
# elif (!defined(__hpux) || (defined(__hpux) && defined(_REENTRANT))) | ||
# define BOOST_DATE_TIME_HAS_REENTRANT_STD_FUNCTIONS | ||
# endif | ||
#endif | ||
|
||
#if defined(BOOST_NO_CXX11_NULLPTR) | ||
# define BOOST_DATE_TIME_NULLPTR 0 | ||
#else | ||
# define BOOST_DATE_TIME_NULLPTR nullptr | ||
#endif | ||
|
||
#endif |
33 changes: 33 additions & 0 deletions
33
extra/boost/boost_1_84_0/boost/date_time/locale_config.hpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
#ifndef DATE_TIME_LOCALE_CONFIG_HPP___ | ||
#define DATE_TIME_LOCALE_CONFIG_HPP___ | ||
|
||
/* Copyright (c) 2002-2020 CrystalClear Software, Inc. | ||
* Use, modification and distribution is subject to the | ||
* Boost Software License, Version 1.0. (See accompanying | ||
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) | ||
* Author: Jeff Garland | ||
* $Date$ | ||
*/ | ||
|
||
// This file configures whether the library will support locales and hence | ||
// iostream based i/o. Even if a compiler has some support for locales, | ||
// any failure to be compatible gets the compiler on the exclusion list. | ||
// | ||
// At the moment this is defined for MSVC 6 and any compiler that | ||
// defines BOOST_NO_STD_LOCALE (gcc 2.95.x) | ||
|
||
#include "boost/config.hpp" //sets BOOST_NO_STD_LOCALE | ||
#include "boost/config/workaround.hpp" | ||
|
||
//This file basically becomes a noop if locales are not properly supported | ||
#if (defined(BOOST_NO_STD_LOCALE) \ | ||
|| (BOOST_WORKAROUND( BOOST_MSVC, < 1300)) \ | ||
|| (BOOST_WORKAROUND( BOOST_BORLANDC, BOOST_TESTED_AT( 0x581 )) ) \ | ||
|| (BOOST_WORKAROUND( BOOST_XLCPP_ZOS, BOOST_TESTED_AT( 0x42010000 )) ) /* <cctype> "shadows" the locale enabled overloads from <locale> */ \ | ||
) | ||
#define BOOST_DATE_TIME_NO_LOCALE | ||
#endif | ||
|
||
|
||
#endif | ||
|