Sha256: e14f7492dd4cc1180921688930816898a4a17dd5e6d19854ec92a069ad0ede49

Contents?: true

Size: 1.52 KB

Versions: 12

Compression:

Stored size: 1.52 KB

Contents

#include <Gosu/Utility.hpp>
#include <GosuImpl/MacUtility.hpp>
#import <Foundation/Foundation.h>
#include <stdexcept>
#include <vector>
using namespace std;

wstring Gosu::utf8ToWstring(const string& s)
{
    if (s.empty())
        return wstring();
    
    ObjRef<NSString> str([[NSString alloc] initWithUTF8String:s.c_str()]);
    vector<wchar_t> buffer(s.size());
    NSUInteger usedBufferCount;
    if (![str.obj() getBytes:&buffer[0]
                    maxLength:buffer.size() * sizeof(wchar_t)
                    usedLength:&usedBufferCount
                    encoding:NSUTF32LittleEndianStringEncoding
                    options:0
                    range:NSMakeRange(0, [str.obj() length])
                    remainingRange:NULL])
        throw std::runtime_error("String " + s + " could not be converted to Unicode");
    return wstring(&buffer[0], &buffer[0] + usedBufferCount / sizeof(wchar_t));
}
string Gosu::wstringToUTF8(const std::wstring& ws)
{
    if (ws.empty())
        return string();

    ObjRef<NSString> str([[NSString alloc] initWithBytes: ws.data()
                                           length: ws.size() * sizeof(wchar_t)
                                           encoding:NSUTF32LittleEndianStringEncoding]);
    ObjRef<NSAutoreleasePool> pool([[NSAutoreleasePool alloc] init]);
    const char* utf8 = [str.obj() UTF8String];
    return utf8 ? utf8 : string();
}
wstring Gosu::widen(const string& s)
{
    return utf8ToWstring(s);
}
string Gosu::narrow(const std::wstring& ws)
{
    return wstringToUTF8(ws);
}

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
gosu-0.7.36.2 GosuImpl/UtilityTouch.mm
gosu-0.7.35 GosuImpl/UtilityTouch.mm
gosu-0.7.33 GosuImpl/UtilityTouch.mm
gosu-0.7.32 GosuImpl/UtilityTouch.mm
gosu-0.7.31 GosuImpl/UtilityTouch.mm
gosu-0.7.30 GosuImpl/UtilityTouch.mm
gosu-0.7.29 GosuImpl/UtilityTouch.mm
gosu-0.7.28 GosuImpl/UtilityTouch.mm
gosu-0.7.27.1 GosuImpl/UtilityTouch.mm
gosu-0.7.27 GosuImpl/UtilityTouch.mm
gosu-0.7.26.1 GosuImpl/UtilityTouch.mm
gosu-0.7.26 GosuImpl/UtilityTouch.mm