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;
+    };
+}