#pragma once #include #include #include #include #include #include #include #include "def.h" #include "memory/alloc.h" #include "memory/wrapper.h" #include "platform/detail.h" namespace ipc { namespace mem { using chunk_variable_alloc = variable_alloc; template using static_async_fixed = static_wrapper>>; using async_pool_alloc = variable_wrapper; template using allocator = allocator_wrapper; } // namespace mem namespace { constexpr char const * pf(int) { return "%d" ; } constexpr char const * pf(long) { return "%ld" ; } constexpr char const * pf(long long) { return "%lld"; } constexpr char const * pf(unsigned int) { return "%u" ; } constexpr char const * pf(unsigned long) { return "%lu" ; } constexpr char const * pf(unsigned long long) { return "%llu"; } constexpr char const * pf(float) { return "%f" ; } constexpr char const * pf(double) { return "%f" ; } constexpr char const * pf(long double) { return "%Lf" ; } } // internal-linkage template using unordered_map = std::unordered_map< Key, T, std::hash, std::equal_to, ipc::mem::allocator> >; template using basic_string = std::basic_string< Char, std::char_traits, ipc::mem::allocator >; using string = basic_string; using wstring = basic_string; template ipc::string to_string(T val) { char buf[std::numeric_limits::digits10 + 1] {}; if (std::snprintf(buf, sizeof(buf), pf(val), val) > 0) { return buf; } return {}; } } // namespace ipc