Просмотр исходного кода

string_util: Implement buffer to UTF-16 string helper function

Needed as most all software keyboard functions use fixed-length UTF16 string buffers.
Zach Hilman 7 лет назад
Родитель
Сommit
c70529c1ec
2 измененных файлов с 17 добавлено и 0 удалено
  1. 9 0
      src/common/string_util.cpp
  2. 8 0
      src/common/string_util.h

+ 9 - 0
src/common/string_util.cpp

@@ -214,6 +214,15 @@ std::string StringFromFixedZeroTerminatedBuffer(const char* buffer, std::size_t
     return std::string(buffer, len);
     return std::string(buffer, len);
 }
 }
 
 
+std::u16string UTF16StringFromFixedZeroTerminatedBuffer(const char16_t* buffer,
+                                                        std::size_t max_len) {
+    std::size_t len = 0;
+    while (len < max_len && buffer[len] != '\0')
+        ++len;
+
+    return std::u16string(buffer, len);
+}
+
 const char* TrimSourcePath(const char* path, const char* root) {
 const char* TrimSourcePath(const char* path, const char* root) {
     const char* p = path;
     const char* p = path;
 
 

+ 8 - 0
src/common/string_util.h

@@ -66,6 +66,14 @@ bool ComparePartialString(InIt begin, InIt end, const char* other) {
  */
  */
 std::string StringFromFixedZeroTerminatedBuffer(const char* buffer, std::size_t max_len);
 std::string StringFromFixedZeroTerminatedBuffer(const char* buffer, std::size_t max_len);
 
 
+/**
+ * Creates a UTF-16 std::u16string from a fixed-size NUL-terminated char buffer. If the buffer isn't
+ * NUL-terminated, then the string ends at the greatest multiple of two less then or equal to
+ * max_len_bytes.
+ */
+std::u16string UTF16StringFromFixedZeroTerminatedBuffer(const char16_t* buffer,
+                                                        std::size_t max_len);
+
 /**
 /**
  * Attempts to trim an arbitrary prefix from `path`, leaving only the part starting at `root`. It's
  * Attempts to trim an arbitrary prefix from `path`, leaving only the part starting at `root`. It's
  * intended to be used to strip a system-specific build directory from the `__FILE__` macro,
  * intended to be used to strip a system-specific build directory from the `__FILE__` macro,