Mercurial > foo_out_sdl
diff foosdk/sdk/pfc/charDownConvert.h @ 1:20d02a178406 default tip
*: check in everything else
yay
| author | Paper <paper@tflc.us> |
|---|---|
| date | Mon, 05 Jan 2026 02:15:46 -0500 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/foosdk/sdk/pfc/charDownConvert.h Mon Jan 05 02:15:46 2026 -0500 @@ -0,0 +1,54 @@ +#pragma once +#include "string_base.h" +#include "fixed_map.h" + +// This converts to ASCII *and* lowercases for simplified search matching +namespace pfc { + class CharStorage { + public: + CharStorage() { } + template<typename TSource> CharStorage(const TSource& in) { Import(in); } + template<typename TSource> const CharStorage& operator=(const TSource& in) { Import(in); return *this; } + + const char* ptr() const { return m_data; } + + void Import(t_uint32 c) { + t_size l = pfc::utf8_encode_char(c, m_data); + m_data[l] = 0; + } + void Import(const char* c) { + PFC_ASSERT(strlen(c) < PFC_TABSIZE(m_data)); +#ifdef _MSC_VER + strcpy_s(m_data, c); +#else + strcpy(m_data, c); +#endif + } + + char m_data[16] = {}; + }; + + class CharDownConvert { + public: + CharDownConvert(); + + void TransformCharCachedAppend(t_uint32 c, pfc::string_base& out); + void TransformStringAppend(pfc::string_base& out, const char* src, size_t len = SIZE_MAX); + void TransformStringHere(pfc::string_base& out, const char* src, size_t len = SIZE_MAX); + string8 TransformString(const char* src) { pfc::string8 ret; TransformStringAppend(ret, src); return ret; } + void TransformString(pfc::string_base& out, const char* src) { + out.reset(); TransformStringAppend(out, src); + } + + static CharDownConvert& instance(); + + struct charMapping_t { + uint16_t from, to; + }; + static const charMapping_t* mappings(); + static size_t numMappings(); + + private: + fixed_map<uint32_t, CharStorage> m_charConvertMap; + }; +}
