// // Copyright Aliaksei Levin (levlam@telegram.org), Arseny Smirnov (arseny30@gmail.com) 2014-2018 // // Distributed under 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) // #pragma once #include "td/utils/config.h" #include "td/utils/port/platform.h" // clang-format off #if TD_WINDOWS #ifndef NTDDI_VERSION #define NTDDI_VERSION 0x06020000 #endif #ifndef WINVER #define WINVER 0x0602 #endif #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0602 #endif #ifndef NOMINMAX #define NOMINMAX #endif #ifndef UNICODE #define UNICODE #endif #ifndef _UNICODE #define _UNICODE #endif #ifndef _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS #endif #include #include #include #include #undef ERROR #endif // clang-format on #include "td/utils/int_types.h" #include #include #include #include #define TD_DEBUG #define TD_DEFINE_STR_IMPL(x) #x #define TD_DEFINE_STR(x) TD_DEFINE_STR_IMPL(x) #define TD_CONCAT_IMPL(x, y) x##y #define TD_CONCAT(x, y) TD_CONCAT_IMPL(x, y) // clang-format off #if TD_WINDOWS #define TD_DIR_SLASH '\\' #else #define TD_DIR_SLASH '/' #endif // clang-format on namespace td { inline bool likely(bool x) { #if TD_CLANG || TD_GCC || TD_INTEL return __builtin_expect(x, 1); #else return x; #endif } inline bool unlikely(bool x) { #if TD_CLANG || TD_GCC || TD_INTEL return __builtin_expect(x, 0); #else return x; #endif } using string = std::string; template using vector = std::vector; template using unique_ptr = std::unique_ptr; using std::make_unique; struct Unit {}; struct Auto { template operator ToT() const { return ToT(); } }; template ToT &as(FromT *from) { return *reinterpret_cast(from); } template const ToT &as(const FromT *from) { return *reinterpret_cast(from); } } // namespace td