diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/foosdk/sdk/pfc/obj-c.mm	Mon Jan 05 02:15:46 2026 -0500
@@ -0,0 +1,143 @@
+//
+//  PFC-ObjC.m
+//  pfc-test
+//
+//  Created by PEPE on 28/07/14.
+//  Copyright (c) 2014 PEPE. All rights reserved.
+//
+#ifdef __APPLE__
+#import <Foundation/Foundation.h>
+
+
+#include <TargetConditionals.h>
+
+#if TARGET_OS_MAC && !TARGET_OS_IPHONE
+#import <Cocoa/Cocoa.h>
+#endif
+
+#include "pfc.h"
+#include "sortstring.h"
+
+
+namespace pfc {
+    void * thread::g_entry(void * arg) {
+        @autoreleasepool {
+            reinterpret_cast<thread*>(arg)->entry();
+        }
+        return NULL;
+    }
+    void thread::appleStartThreadPrologue() {
+        if (![NSThread isMultiThreaded]) [[[NSThread alloc] init] start];
+    }
+    
+    bool isShiftKeyPressed() {
+#if TARGET_OS_MAC && !TARGET_OS_IPHONE
+        return ( [NSEvent modifierFlags] & NSEventModifierFlagShift ) != 0;
+#else
+        return false;
+#endif
+    }
+    bool isCtrlKeyPressed() {
+#if TARGET_OS_MAC && !TARGET_OS_IPHONE
+        return ( [NSEvent modifierFlags] & NSEventModifierFlagControl ) != 0;
+#else
+        return false;
+#endif
+    }
+    bool isAltKeyPressed() {
+#if TARGET_OS_MAC && !TARGET_OS_IPHONE
+        return ( [NSEvent modifierFlags] & NSEventModifierFlagOption ) != 0;
+#else
+        return false;
+#endif
+    }
+
+	void inAutoReleasePool(std::function<void()> f) {
+		@autoreleasepool {		
+			f();
+		}
+	}
+    
+    void appleDebugLog( const char * str ) {
+        NSLog(@"%s\n", str );
+    }
+    
+    bool appleRecycleFile( const char * path ) {
+        @autoreleasepool {
+            NSFileManager * manager = [NSFileManager defaultManager];
+            NSURL * url = [NSURL fileURLWithPath: [NSString stringWithUTF8String: path] ];
+            if (@available(iOS 11.0, *)) {
+                NSError * error = nil;
+                if ([manager trashItemAtURL: url resultingItemURL: nil error: &error]) {
+                    return true;
+                }
+                if ([error.domain isEqualToString: NSCocoaErrorDomain] && error.code == NSFeatureUnsupportedError) {
+                    // trashcan not supported, fall thru
+                } else {
+                    // failed to remove
+                    return false;
+                }
+            }
+            return [manager removeItemAtURL: url error: nil];
+        }
+    }
+    void appleSetThreadDescription( const char * str ) {
+        @autoreleasepool {
+            [NSThread currentThread].name = [NSString stringWithUTF8String: str];
+        }
+    }
+
+    pfc::string8 unicodeNormalizeD(const char * str) {
+        @autoreleasepool {
+            pfc::string8 ret;
+            NSString * v = [[NSString stringWithUTF8String: str] decomposedStringWithCanonicalMapping];
+            if ( v ) ret = v.UTF8String;
+            else ret = str;
+            return ret;
+        }
+    }
+    pfc::string8 unicodeNormalizeC(const char * str) {
+        @autoreleasepool {
+            pfc::string8 ret;
+            NSString * v = [[NSString stringWithUTF8String: str] precomposedStringWithCanonicalMapping];
+            if ( v ) ret = v.UTF8String;
+            else ret = str;
+            return ret;
+        }
+    }
+
+    int appleNaturalSortCompare(const char* s1, const char* s2) {
+        @autoreleasepool {
+            NSString * str1 = [NSString stringWithUTF8String: s1];
+            NSString * str2 = [NSString stringWithUTF8String: s2];
+            return (int) [str1 localizedCompare: str2];
+        }
+    }
+    int appleNaturalSortCompareI(const char* s1, const char* s2) {
+        @autoreleasepool {
+            NSString * str1 = [NSString stringWithUTF8String: s1];
+            NSString * str2 = [NSString stringWithUTF8String: s2];
+            return (int) [str1 localizedCaseInsensitiveCompare: str2];
+        }
+    }
+    [[noreturn]] void appleThrowException( const char * name, const char * reason ) {
+        @autoreleasepool {
+            @throw [NSException exceptionWithName: [NSString stringWithUTF8String: name] reason:[NSString stringWithUTF8String: reason] userInfo:nil];
+        }
+    }
+
+#ifndef PFC_SORTSTRING_GENERIC
+    sortString_t makeSortString(const char* str) {
+        sortString_t ret;
+        ret.Attach( CFStringCreateWithCString(NULL, str, kCFStringEncodingUTF8) );
+        return ret;
+    }
+    int sortStringCompare(sortString_t const& s1, sortString_t const& s2) {
+        return (int) CFStringCompare(s1.p, s2.p, kCFCompareLocalized | kCFCompareNumerically );
+    }
+    int sortStringCompareI(sortString_t const& s1, sortString_t const& s2) {
+        return (int) CFStringCompare(s1.p, s2.p, kCFCompareLocalized | kCFCompareNumerically | kCFCompareCaseInsensitive );
+    }
+#endif
+}
+#endif