]> git.saurik.com Git - cydia.git/commitdiff
20 minutes of typing.
authorJay Freeman (saurik) <saurik@saurik.com>
Wed, 17 Jun 2009 06:42:06 +0000 (06:42 +0000)
committerJay Freeman (saurik) <saurik@saurik.com>
Thu, 30 Sep 2010 07:13:15 +0000 (07:13 +0000)
UICaboodle/Internals.h [deleted file]
UICaboodle/UCInternal.h [new file with mode: 0644]
UICaboodle/UCPlatform.h [new file with mode: 0644]
UICaboodle/UCString.h
UICaboodle/UCYield.h [new file with mode: 0644]
UICaboodle/UICaboodle.h [deleted file]

diff --git a/UICaboodle/Internals.h b/UICaboodle/Internals.h
deleted file mode 100644 (file)
index 62b46e2..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-- (NSMethodSignature *) methodSignatureForSelector:(SEL)selector {
-    fprintf(stderr, "[%s]S-%s\n", class_getName(self->isa), sel_getName(selector));
-    return [super methodSignatureForSelector:selector];
-}
-
-- (BOOL) respondsToSelector:(SEL)selector {
-    BOOL responds = [super respondsToSelector:selector];
-    fprintf(stderr, "[%s]R%c%s\n", class_getName(self->isa), (responds ? '+' : '-'), sel_getName(selector));
-    return responds;
-}
diff --git a/UICaboodle/UCInternal.h b/UICaboodle/UCInternal.h
new file mode 100644 (file)
index 0000000..62b46e2
--- /dev/null
@@ -0,0 +1,10 @@
+- (NSMethodSignature *) methodSignatureForSelector:(SEL)selector {
+    fprintf(stderr, "[%s]S-%s\n", class_getName(self->isa), sel_getName(selector));
+    return [super methodSignatureForSelector:selector];
+}
+
+- (BOOL) respondsToSelector:(SEL)selector {
+    BOOL responds = [super respondsToSelector:selector];
+    fprintf(stderr, "[%s]R%c%s\n", class_getName(self->isa), (responds ? '+' : '-'), sel_getName(selector));
+    return responds;
+}
diff --git a/UICaboodle/UCPlatform.h b/UICaboodle/UCPlatform.h
new file mode 100644 (file)
index 0000000..0940406
--- /dev/null
@@ -0,0 +1,49 @@
+#define __STDC_LIMIT_MACROS
+#include <stdint.h>
+
+#include <objc/objc.h>
+
+#include <sys/time.h>
+#include <time.h>
+
+#define _forever \
+    for (;;)
+
+extern struct timeval _ltv;
+extern bool _itv;
+
+#define _trace() do { \
+    struct timeval _ctv; \
+    gettimeofday(&_ctv, NULL); \
+    if (!_itv) { \
+        _itv = true; \
+        _ltv = _ctv; \
+    } \
+    fprintf(stderr, "%lu.%.6u[%f]:_trace()@%s:%u[%s]\n", \
+        _ctv.tv_sec, _ctv.tv_usec, \
+        (_ctv.tv_sec - _ltv.tv_sec) + (_ctv.tv_usec - _ltv.tv_usec) / 1000000.0, \
+        __FILE__, __LINE__, __FUNCTION__\
+    ); \
+    _ltv = _ctv; \
+} while (false)
+
+#define _assert(test) do \
+    if (!(test)) { \
+        fprintf(stderr, "_assert(%d:%s)@%s:%u[%s]\n", errno, #test, __FILE__, __LINE__, __FUNCTION__); \
+        exit(-1); \
+    } \
+while (false)
+
+#define _not(type) ((type) ~ (type) 0)
+
+#define _transient
+
+#define _label__(x) _label ## x
+#define _label_(y) _label__(y)
+#define _label _label_(__LINE__)
+
+#define _packed \
+    __attribute__((packed))
+
+//#define _finline __attribute__((force_inline))
+#define _finline inline
index 77ee6a1b3060884e2055abe82b95bc4108adcda2..d776728adab9477b16769cd999bb4b0a93f4691a 100644 (file)
@@ -3,8 +3,14 @@
 
 #import <Foundation/NSString.h>
 
+@interface NSString (UIKit)
+- (NSString *) stringByAddingPercentEscapes;
+- (NSString *) stringByReplacingCharacter:(unsigned short)arg0 withCharacter:(unsigned short)arg1;
+@end
+
 @interface NSString (UICaboodle)
 + (NSString *) stringWithDataSize:(double)size;
+- (NSString *) stringByAddingPercentEscapesIncludingReserved;
 @end
 
 @implementation NSString (UICaboodle)
     return [NSString stringWithFormat:@"%.1f%s", size, powers_[power]];
 }
 
+- (NSString *) stringByAddingPercentEscapesIncludingReserved {
+    return [(id)CFURLCreateStringByAddingPercentEscapes(
+        kCFAllocatorDefault, 
+        (CFStringRef) self,
+        NULL,
+        CFSTR(";/?:@&=+$,"),
+        kCFStringEncodingUTF8
+    ) autorelease];
+}
+
 @end
 
 #endif/*UICABOODLE_UCSTRING_H*/
diff --git a/UICaboodle/UCYield.h b/UICaboodle/UCYield.h
new file mode 100644 (file)
index 0000000..dc75f8f
--- /dev/null
@@ -0,0 +1,64 @@
+@interface NSObject (UICaboodle)
+- (id) yieldToSelector:(SEL)selector withObject:(id)object;
+- (id) yieldToSelector:(SEL)selector;
+@end
+
+@implementation NSObject (UICaboodle)
+
+- (void) doNothing {
+}
+
+- (void) _yieldToContext:(NSMutableArray *)context { _pooled
+    SEL selector(reinterpret_cast<SEL>([[context objectAtIndex:0] pointerValue]));
+    id object([[context objectAtIndex:1] nonretainedObjectValue]);
+    volatile bool &stopped(*reinterpret_cast<bool *>([[context objectAtIndex:2] pointerValue]));
+
+    /* XXX: deal with exceptions */
+    id value([self performSelector:selector withObject:object]);
+
+    NSMethodSignature *signature([self methodSignatureForSelector:selector]);
+    [context removeAllObjects];
+    if ([signature methodReturnLength] != 0 && value != nil)
+        [context addObject:value];
+
+    stopped = true;
+
+    [self
+        performSelectorOnMainThread:@selector(doNothing)
+        withObject:nil
+        waitUntilDone:NO
+    ];
+}
+
+- (id) yieldToSelector:(SEL)selector withObject:(id)object {
+    /*return [self performSelector:selector withObject:object];*/
+
+    volatile bool stopped(false);
+
+    NSMutableArray *context([NSMutableArray arrayWithObjects:
+        [NSValue valueWithPointer:selector],
+        [NSValue valueWithNonretainedObject:object],
+        [NSValue valueWithPointer:const_cast<bool *>(&stopped)],
+    nil]);
+
+    NSThread *thread([[[NSThread alloc]
+        initWithTarget:self
+        selector:@selector(_yieldToContext:)
+        object:context
+    ] autorelease]);
+
+    [thread start];
+
+    NSRunLoop *loop([NSRunLoop currentRunLoop]);
+    NSDate *future([NSDate distantFuture]);
+
+    while (!stopped && [loop runMode:NSDefaultRunLoopMode beforeDate:future]);
+
+    return [context count] == 0 ? nil : [context objectAtIndex:0];
+}
+
+- (id) yieldToSelector:(SEL)selector {
+    return [self yieldToSelector:selector withObject:nil];
+}
+
+@end
diff --git a/UICaboodle/UICaboodle.h b/UICaboodle/UICaboodle.h
deleted file mode 100644 (file)
index f9a4eb3..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-#define __STDC_LIMIT_MACROS
-#include <stdint.h>
-
-#include <objc/objc.h>
-
-#include <sys/time.h>
-#include <time.h>
-
-#define _forever \
-    for (;;)
-
-extern struct timeval _ltv;
-extern bool _itv;
-
-#define _trace() do { \
-    struct timeval _ctv; \
-    gettimeofday(&_ctv, NULL); \
-    if (!_itv) { \
-        _itv = true; \
-        _ltv = _ctv; \
-    } \
-    fprintf(stderr, "%lu.%.6u[%f]:_trace()@%s:%u[%s]\n", \
-        _ctv.tv_sec, _ctv.tv_usec, \
-        (_ctv.tv_sec - _ltv.tv_sec) + (_ctv.tv_usec - _ltv.tv_usec) / 1000000.0, \
-        __FILE__, __LINE__, __FUNCTION__\
-    ); \
-    _ltv = _ctv; \
-} while (false)
-
-#define _assert(test) do \
-    if (!(test)) { \
-        fprintf(stderr, "_assert(%d:%s)@%s:%u[%s]\n", errno, #test, __FILE__, __LINE__, __FUNCTION__); \
-        exit(-1); \
-    } \
-while (false)
-
-#define _not(type) ((type) ~ (type) 0)
-
-#define _transient
-
-#define _label__(x) _label ## x
-#define _label_(y) _label__(y)
-#define _label _label_(__LINE__)
-
-#define _packed \
-    __attribute__((packed))