diff options
Diffstat (limited to 'src/osx/Convert.cpp')
-rw-r--r-- | src/osx/Convert.cpp | 30 |
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 |