Skip to content

Commit 2e52fa4

Browse files
committed
Change BasicString to be templated on character types
1 parent 21d61d7 commit 2e52fa4

13 files changed

+271
-274
lines changed

build/win/libfly_unit_tests/libfly_unit_tests.vcxproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -257,11 +257,11 @@
257257
<ClCompile Include="..\..\..\test\types\numeric\literals.cpp" />
258258
<ClCompile Include="..\..\..\test\types\string\classifier.cpp" />
259259
<ClCompile Include="..\..\..\test\types\string\converter.cpp" />
260+
<ClCompile Include="..\..\..\test\types\string\format.cpp" />
260261
<ClCompile Include="..\..\..\test\types\string\format_parameters.cpp" />
261262
<ClCompile Include="..\..\..\test\types\string\format_string.cpp" />
262263
<ClCompile Include="..\..\..\test\types\string\lexer.cpp" />
263264
<ClCompile Include="..\..\..\test\types\string\string.cpp" />
264-
<ClCompile Include="..\..\..\test\types\string\string_format.cpp" />
265265
<ClCompile Include="..\..\..\test\types\string\string_traits.cpp" />
266266
<ClCompile Include="..\..\..\test\types\string\unicode.cpp" />
267267
</ItemGroup>

build/win/libfly_unit_tests/libfly_unit_tests.vcxproj.filters

+3-3
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,9 @@
164164
<ClCompile Include="..\..\..\test\types\string\converter.cpp">
165165
<Filter>types\string</Filter>
166166
</ClCompile>
167+
<ClCompile Include="..\..\..\test\types\string\format.cpp">
168+
<Filter>types\string</Filter>
169+
</ClCompile>
167170
<ClCompile Include="..\..\..\test\types\string\format_parameters.cpp">
168171
<Filter>types\string</Filter>
169172
</ClCompile>
@@ -176,9 +179,6 @@
176179
<ClCompile Include="..\..\..\test\types\string\string.cpp">
177180
<Filter>types\string</Filter>
178181
</ClCompile>
179-
<ClCompile Include="..\..\..\test\types\string\string_format.cpp">
180-
<Filter>types\string</Filter>
181-
</ClCompile>
182182
<ClCompile Include="..\..\..\test\types\string\string_traits.cpp">
183183
<Filter>types\string</Filter>
184184
</ClCompile>

fly/parser/parser.hpp

+9-9
Original file line numberDiff line numberDiff line change
@@ -183,16 +183,16 @@ class Parser
183183
template <typename StringType>
184184
std::optional<fly::Json> Parser::parse_string(const StringType &contents)
185185
{
186-
using CharType = typename StringType::value_type;
186+
using char_type = typename StringType::value_type;
187187

188-
if constexpr (std::is_same_v<CharType, std::ios::char_type>)
188+
if constexpr (std::is_same_v<char_type, std::ios::char_type>)
189189
{
190-
std::basic_istringstream<CharType> stream(contents);
190+
std::basic_istringstream<char_type> stream(contents);
191191
return parse_stream(std::move(stream));
192192
}
193193
else
194194
{
195-
auto utf8_contents = fly::BasicString<StringType>::template convert<std::string>(contents);
195+
auto utf8_contents = fly::BasicString<char_type>::template convert<std::string>(contents);
196196
return utf8_contents ? parse_string(*utf8_contents) : std::nullopt;
197197
}
198198
}
@@ -201,19 +201,19 @@ std::optional<fly::Json> Parser::parse_string(const StringType &contents)
201201
template <typename StringType, std::endian Endianness>
202202
std::optional<std::string> Parser::ensure_utf8(std::istream &stream) const
203203
{
204-
using CharType = typename StringType::value_type;
204+
using char_type = typename StringType::value_type;
205205

206-
static constexpr const std::uint8_t s_char_size = sizeof(CharType);
206+
static constexpr const std::uint8_t s_char_size = sizeof(char_type);
207207
StringType contents;
208208

209209
while (stream)
210210
{
211-
CharType character = 0;
211+
char_type character = 0;
212212

213213
for (std::uint8_t i = 0; stream && (i < s_char_size); ++i)
214214
{
215215
const std::uint8_t shift = 8 * (s_char_size - i - 1);
216-
character |= static_cast<CharType>(stream.get() & 0xff) << shift;
216+
character |= static_cast<char_type>(stream.get() & 0xff) << shift;
217217
}
218218

219219
if (stream)
@@ -227,7 +227,7 @@ std::optional<std::string> Parser::ensure_utf8(std::istream &stream) const
227227
}
228228
}
229229

230-
return fly::BasicString<StringType>::template convert<std::string>(contents);
230+
return fly::BasicString<char_type>::template convert<std::string>(contents);
231231
}
232232

233233
//==================================================================================================

fly/types/json/json.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1957,7 +1957,7 @@ bool Json::contains(T key) const
19571957
template <typename T, enable_if<JsonTraits::is_string_like<T>>>
19581958
JsonTraits::string_type Json::convert_to_string(T value)
19591959
{
1960-
using StringType = BasicString<JsonTraits::is_string_like_t<T>>;
1960+
using StringType = BasicString<typename JsonTraits::is_string_like_t<T>::value_type>;
19611961

19621962
if constexpr (std::is_same_v<typename StringType::string_type, JsonTraits::string_type>)
19631963
{

fly/types/json/json_traits.hpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,17 @@ struct JsonTraits
4242
using object_type = std::map<string_type, Json>;
4343
using array_type = std::vector<Json>;
4444

45-
/**
46-
* Alias for the fly::BasicString specialization for the JSON string type.
47-
*/
48-
using StringType = BasicString<string_type>;
49-
5045
/**
5146
* Alias for the JSON string character type. Though it is not a valid JSON type itself, knowing
5247
* its type is often useful.
5348
*/
5449
using char_type = typename string_type::value_type;
5550

51+
/**
52+
* Alias for the fly::BasicString specialization for the JSON string type.
53+
*/
54+
using StringType = BasicString<char_type>;
55+
5656
/**
5757
* Define a trait for testing if type T is a JSON null type.
5858
*/

0 commit comments

Comments
 (0)