aboutsummaryrefslogtreecommitdiff
path: root/src/base/String.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/base/String.cpp')
-rw-r--r--src/base/String.cpp30
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