aboutsummaryrefslogtreecommitdiff
path: root/src/osx/Convert.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/osx/Convert.cpp')
-rw-r--r--src/osx/Convert.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/osx/Convert.cpp b/src/osx/Convert.cpp
new file mode 100644
index 00000000..51ebedf4
--- /dev/null
+++ b/src/osx/Convert.cpp
@@ -0,0 +1,30 @@
+#include "cru/osx/Convert.hpp"
+
+namespace cru::cru::platform::osx {
+CFStringRef Convert(const String& string) {
+ return CFStringCreateWithBytes(
+ nullptr, reinterpret_cast<const UInt8*>(string.data()),
+ string.size() * sizeof(std::uint16_t), kCFStringEncodingUTF16, false);
+}
+
+String Convert(CFStringRef string) {
+ auto d = CFStringCreateExternalRepresentation(nullptr, string,
+ kCFStringEncodingUTF16, 0);
+ auto l = CFDataGetLength(d);
+
+ auto s = String(reinterpret_cast<const std::uint16_t*>(CFDataGetBytePtr(d)),
+ CFDataGetLength(d) / 2);
+
+ CFRelease(d);
+
+ return s;
+}
+
+CFRange Convert(const Range& range) {
+ return CFRangeMake(range.position, range.count);
+}
+
+Range Convert(const CFRange& range) {
+ return Range(range.location, range.length);
+}
+} // namespace cru::cru::platform::osx