comparison foosdk/sdk/pfc/obj-c.mm @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
comparison
equal deleted inserted replaced
0:e9bb126753e7 1:20d02a178406
1 //
2 // PFC-ObjC.m
3 // pfc-test
4 //
5 // Created by PEPE on 28/07/14.
6 // Copyright (c) 2014 PEPE. All rights reserved.
7 //
8 #ifdef __APPLE__
9 #import <Foundation/Foundation.h>
10
11
12 #include <TargetConditionals.h>
13
14 #if TARGET_OS_MAC && !TARGET_OS_IPHONE
15 #import <Cocoa/Cocoa.h>
16 #endif
17
18 #include "pfc.h"
19 #include "sortstring.h"
20
21
22 namespace pfc {
23 void * thread::g_entry(void * arg) {
24 @autoreleasepool {
25 reinterpret_cast<thread*>(arg)->entry();
26 }
27 return NULL;
28 }
29 void thread::appleStartThreadPrologue() {
30 if (![NSThread isMultiThreaded]) [[[NSThread alloc] init] start];
31 }
32
33 bool isShiftKeyPressed() {
34 #if TARGET_OS_MAC && !TARGET_OS_IPHONE
35 return ( [NSEvent modifierFlags] & NSEventModifierFlagShift ) != 0;
36 #else
37 return false;
38 #endif
39 }
40 bool isCtrlKeyPressed() {
41 #if TARGET_OS_MAC && !TARGET_OS_IPHONE
42 return ( [NSEvent modifierFlags] & NSEventModifierFlagControl ) != 0;
43 #else
44 return false;
45 #endif
46 }
47 bool isAltKeyPressed() {
48 #if TARGET_OS_MAC && !TARGET_OS_IPHONE
49 return ( [NSEvent modifierFlags] & NSEventModifierFlagOption ) != 0;
50 #else
51 return false;
52 #endif
53 }
54
55 void inAutoReleasePool(std::function<void()> f) {
56 @autoreleasepool {
57 f();
58 }
59 }
60
61 void appleDebugLog( const char * str ) {
62 NSLog(@"%s\n", str );
63 }
64
65 bool appleRecycleFile( const char * path ) {
66 @autoreleasepool {
67 NSFileManager * manager = [NSFileManager defaultManager];
68 NSURL * url = [NSURL fileURLWithPath: [NSString stringWithUTF8String: path] ];
69 if (@available(iOS 11.0, *)) {
70 NSError * error = nil;
71 if ([manager trashItemAtURL: url resultingItemURL: nil error: &error]) {
72 return true;
73 }
74 if ([error.domain isEqualToString: NSCocoaErrorDomain] && error.code == NSFeatureUnsupportedError) {
75 // trashcan not supported, fall thru
76 } else {
77 // failed to remove
78 return false;
79 }
80 }
81 return [manager removeItemAtURL: url error: nil];
82 }
83 }
84 void appleSetThreadDescription( const char * str ) {
85 @autoreleasepool {
86 [NSThread currentThread].name = [NSString stringWithUTF8String: str];
87 }
88 }
89
90 pfc::string8 unicodeNormalizeD(const char * str) {
91 @autoreleasepool {
92 pfc::string8 ret;
93 NSString * v = [[NSString stringWithUTF8String: str] decomposedStringWithCanonicalMapping];
94 if ( v ) ret = v.UTF8String;
95 else ret = str;
96 return ret;
97 }
98 }
99 pfc::string8 unicodeNormalizeC(const char * str) {
100 @autoreleasepool {
101 pfc::string8 ret;
102 NSString * v = [[NSString stringWithUTF8String: str] precomposedStringWithCanonicalMapping];
103 if ( v ) ret = v.UTF8String;
104 else ret = str;
105 return ret;
106 }
107 }
108
109 int appleNaturalSortCompare(const char* s1, const char* s2) {
110 @autoreleasepool {
111 NSString * str1 = [NSString stringWithUTF8String: s1];
112 NSString * str2 = [NSString stringWithUTF8String: s2];
113 return (int) [str1 localizedCompare: str2];
114 }
115 }
116 int appleNaturalSortCompareI(const char* s1, const char* s2) {
117 @autoreleasepool {
118 NSString * str1 = [NSString stringWithUTF8String: s1];
119 NSString * str2 = [NSString stringWithUTF8String: s2];
120 return (int) [str1 localizedCaseInsensitiveCompare: str2];
121 }
122 }
123 [[noreturn]] void appleThrowException( const char * name, const char * reason ) {
124 @autoreleasepool {
125 @throw [NSException exceptionWithName: [NSString stringWithUTF8String: name] reason:[NSString stringWithUTF8String: reason] userInfo:nil];
126 }
127 }
128
129 #ifndef PFC_SORTSTRING_GENERIC
130 sortString_t makeSortString(const char* str) {
131 sortString_t ret;
132 ret.Attach( CFStringCreateWithCString(NULL, str, kCFStringEncodingUTF8) );
133 return ret;
134 }
135 int sortStringCompare(sortString_t const& s1, sortString_t const& s2) {
136 return (int) CFStringCompare(s1.p, s2.p, kCFCompareLocalized | kCFCompareNumerically );
137 }
138 int sortStringCompareI(sortString_t const& s1, sortString_t const& s2) {
139 return (int) CFStringCompare(s1.p, s2.p, kCFCompareLocalized | kCFCompareNumerically | kCFCompareCaseInsensitive );
140 }
141 #endif
142 }
143 #endif