diff options
Diffstat (limited to 'src/base/String.cpp')
-rw-r--r-- | src/base/String.cpp | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/src/base/String.cpp b/src/base/String.cpp index 47b64373..40d0b766 100644 --- a/src/base/String.cpp +++ b/src/base/String.cpp @@ -12,7 +12,10 @@ #include <cmath> #include <cstring> #include <functional> -#include <string_view> + +#ifdef CRU_PLATFORM_OSX +#include <CoreFoundation/CoreFoundation.h> +#endif namespace cru { template <typename C> @@ -669,4 +672,29 @@ String ToUpper(StringView s) { for (auto c : s) result.push_back(ToUpper(c)); return result; } + + +#ifdef CRU_PLATFORM_OSX +CFWrapper<CFStringRef> StringView::ToCFStringRef() const { + return CFWrapper<CFStringRef>(CFStringCreateWithBytes( + nullptr, reinterpret_cast<const UInt8*>(this->data()), + this->size() * sizeof(std::uint16_t), kCFStringEncodingUTF16, false)); +} + +CFWrapper<CFStringRef> String::ToCFStringRef() const { + return StringView(*this).ToCFStringRef(); +} + +String String::FromCFStringRef(CFStringRef string) { + auto length = CFStringGetLength(string); + + String result; + + for (int i = 0; i < length; i++) { + result.AppendCodePoint(CFStringGetCharacterAtIndex(string, i)); + } + + return result; +} +#endif } // namespace cru |