| 2133 | |
| 2134 | // A formatting argument value. |
| 2135 | template <typename Context> class value { |
| 2136 | public: |
| 2137 | using char_type = typename Context::char_type; |
| 2138 | |
| 2139 | union { |
| 2140 | monostate no_value; |
| 2141 | int int_value; |
| 2142 | unsigned uint_value; |
| 2143 | long long long_long_value; |
| 2144 | ullong ulong_long_value; |
| 2145 | native_int128 int128_value; |
| 2146 | native_uint128 uint128_value; |
| 2147 | bool bool_value; |
| 2148 | char_type char_value; |
| 2149 | float float_value; |
| 2150 | double double_value; |
| 2151 | long double long_double_value; |
| 2152 | const void* pointer; |
| 2153 | string_value<char_type> string; |
| 2154 | custom_value<Context> custom; |
| 2155 | named_arg_value<char_type> named_args; |
| 2156 | }; |
| 2157 | |
| 2158 | constexpr FMT_INLINE value() : no_value() {} |
| 2159 | constexpr FMT_INLINE value(signed char x) : int_value(x) {} |
| 2160 | constexpr FMT_INLINE value(unsigned char x FMT_BUILTIN) : uint_value(x) {} |
| 2161 | constexpr FMT_INLINE value(signed short x) : int_value(x) {} |
| 2162 | constexpr FMT_INLINE value(unsigned short x FMT_BUILTIN) : uint_value(x) {} |
| 2163 | constexpr FMT_INLINE value(int x) : int_value(x) {} |
| 2164 | constexpr FMT_INLINE value(unsigned x FMT_BUILTIN) : uint_value(x) {} |
| 2165 | constexpr FMT_INLINE value(long x FMT_BUILTIN) : value(long_type(x)) {} |
| 2166 | constexpr FMT_INLINE value(unsigned long x FMT_BUILTIN) |
| 2167 | : value(ulong_type(x)) {} |
| 2168 | constexpr FMT_INLINE value(long long x FMT_BUILTIN) : long_long_value(x) {} |
| 2169 | constexpr FMT_INLINE value(ullong x FMT_BUILTIN) : ulong_long_value(x) {} |
| 2170 | FMT_INLINE value(native_int128 x FMT_BUILTIN) : int128_value(x) {} |
| 2171 | FMT_INLINE value(native_uint128 x FMT_BUILTIN) : uint128_value(x) {} |
| 2172 | constexpr FMT_INLINE value(bool x FMT_BUILTIN) : bool_value(x) {} |
| 2173 | |
| 2174 | template <typename T, FMT_ENABLE_IF(is_code_unit<T>::value)> |
| 2175 | constexpr FMT_INLINE value(T x FMT_BUILTIN) : char_value(x) { |
| 2176 | static_assert( |
| 2177 | std::is_same<T, char>::value || std::is_same<T, char_type>::value, |
| 2178 | "mixing character types is disallowed"); |
| 2179 | } |
| 2180 | |
| 2181 | constexpr FMT_INLINE value(float x FMT_BUILTIN) : float_value(x) {} |
| 2182 | constexpr FMT_INLINE value(double x FMT_BUILTIN) : double_value(x) {} |
| 2183 | FMT_INLINE value(long double x FMT_BUILTIN) : long_double_value(x) {} |
| 2184 | |
| 2185 | FMT_CONSTEXPR FMT_INLINE value(char_type* x FMT_BUILTIN) { |
| 2186 | string.data = x; |
| 2187 | if (is_constant_evaluated()) string.size = 0; |
| 2188 | } |
| 2189 | FMT_CONSTEXPR FMT_INLINE value(const char_type* x FMT_BUILTIN) { |
| 2190 | string.data = x; |
| 2191 | if (is_constant_evaluated()) string.size = 0; |
| 2192 | } |
no outgoing calls
no test coverage detected