X-Git-Url: https://git.mdrn.pl/wl-app.git/blobdiff_plain/53b27422d140022594fc241cca91c3183be57bca..48b2fe9f7c2dc3d9aeaaa6dbfb27c7da4f3235ff:/iOS/Pods/Realm/include/util/time.hpp diff --git a/iOS/Pods/Realm/include/util/time.hpp b/iOS/Pods/Realm/include/util/time.hpp new file mode 100644 index 0000000..c0fceb8 --- /dev/null +++ b/iOS/Pods/Realm/include/util/time.hpp @@ -0,0 +1,72 @@ +//////////////////////////////////////////////////////////////////////////// +// +// Copyright 2017 Realm Inc. +// +// 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. +// +//////////////////////////////////////////////////////////////////////////// + +#ifndef REALM_OS_UTIL_TIME_HPP +#define REALM_OS_UTIL_TIME_HPP + +#include +#include +#include +#include + +namespace realm { +namespace util { + +// Like std::localtime, but safe with reentrancy and multiple threads. +inline std::tm localtime(std::time_t time) +{ + std::tm calendar_time; +#ifdef _WIN32 + // note that VC++'s localtime_s has a different signature from what C++11 specifies + auto error = localtime_s(&calendar_time, &time); + if (error) + throw std::system_error(error, std::system_category()); +#else + auto result = localtime_r(&time, &calendar_time); + if (!result) + throw std::system_error(errno, std::system_category()); +#endif + + return calendar_time; +} + +// Like std::put_time, but compatible with GCC 4.9. +inline std::string put_time(std::time_t time, const char *format) +{ + std::tm calendar_time = localtime(time); + size_t estimated_length = std::strlen(format) + 1; + + size_t formatted_length; + std::string buffer; + + // Loop until the buffer is large enough to hold the string generated by `strftime`, growing the + // buffer by 8 characters whenever it is too small to hold the resulting string. + do { + buffer.resize(estimated_length); + formatted_length = strftime(&buffer[0], buffer.size(), format, &calendar_time); + estimated_length += 8; + } while (formatted_length == 0); + + buffer.resize(formatted_length); + return buffer; +} + +} // namespace util +} // namespace realm + +#endif // REALM_OS_UTIL_TIME_HPP