25#include "../../basic_string.hpp"
26#include "../../char8_t_remediation.hpp"
32namespace essence::meta::detail {
33 inline constexpr auto underscore = U8(
'_');
35 template <std_basic_
string T>
36 T camelize_or_pascalize(std::string_view name,
bool camel) {
39 if (!result.empty()) {
40 result.front() = camel ? std::tolower(result.front()) : std::toupper(result.front());
43 for (
auto iter = result.begin(); iter != result.end(); ++iter) {
44 if (*iter == underscore && iter + 1 != result.end()) {
45 *(iter + 1) = std::toupper(*(iter + 1));
49 std::erase_if(result, [](
char c) {
return c == underscore; });
54 template <std_basic_
string T>
55 T make_snake_case(std::string_view name) {
60 T result(name.size() * 2, U8(
'\0'));
61 auto iter_result = result.begin();
63 *iter_result++ = std::tolower(*name.begin());
65 for (
auto iter = name.begin() + 1; iter != name.end(); ++iter, ++iter_result) {
66 if (std::isupper(*iter)) {
67 *iter_result = underscore;
68 *(++iter_result) = std::tolower(*iter);
75 result.resize(iter_result - result.begin());
76 result.shrink_to_fit();