|
@@ -67,3 +67,68 @@
|
|
*/
|
|
*/
|
|
#define MAS_NSUINT_BIT (CHAR_BIT * sizeof(NSUInteger))
|
|
#define MAS_NSUINT_BIT (CHAR_BIT * sizeof(NSUInteger))
|
|
#define MAS_NSUINTROTATE(val, howmuch) ((((NSUInteger)val) << howmuch) | (((NSUInteger)val) >> (MAS_NSUINT_BIT - howmuch)))
|
|
#define MAS_NSUINTROTATE(val, howmuch) ((((NSUInteger)val) << howmuch) | (((NSUInteger)val) >> (MAS_NSUINT_BIT - howmuch)))
|
|
|
|
+
|
|
|
|
+// TODO: description
|
|
|
|
+
|
|
|
|
+static inline id _MASBoxValue(const char *type, ...) {
|
|
|
|
+ va_list v;
|
|
|
|
+ va_start(v, type);
|
|
|
|
+ id obj = nil;
|
|
|
|
+ if (strcmp(type, @encode(id)) == 0) {
|
|
|
|
+ id actual = va_arg(v, id);
|
|
|
|
+ obj = actual;
|
|
|
|
+ } else if (strcmp(type, @encode(CGPoint)) == 0) {
|
|
|
|
+ CGPoint actual = (CGPoint)va_arg(v, CGPoint);
|
|
|
|
+ obj = [NSValue value:&actual withObjCType:type];
|
|
|
|
+ } else if (strcmp(type, @encode(CGSize)) == 0) {
|
|
|
|
+ CGSize actual = (CGSize)va_arg(v, CGSize);
|
|
|
|
+ obj = [NSValue value:&actual withObjCType:type];
|
|
|
|
+ } else if (strcmp(type, @encode(MASEdgeInsets)) == 0) {
|
|
|
|
+ MASEdgeInsets actual = (MASEdgeInsets)va_arg(v, MASEdgeInsets);
|
|
|
|
+ obj = [NSValue value:&actual withObjCType:type];
|
|
|
|
+ } else if (strcmp(type, @encode(char)) == 0) {
|
|
|
|
+ char actual = (char)va_arg(v, int);
|
|
|
|
+ obj = [NSNumber numberWithChar:actual];
|
|
|
|
+ } else if(strcmp(type, @encode(_Bool)) == 0) {
|
|
|
|
+ _Static_assert(sizeof(_Bool) <= sizeof(int), "Expected _Bool to be subject to vararg type promotion");
|
|
|
|
+ _Bool actual = (_Bool)va_arg(v, int);
|
|
|
|
+ obj = [NSNumber numberWithBool:actual];
|
|
|
|
+ } else if (strcmp(type, @encode(double)) == 0) {
|
|
|
|
+ double actual = (double)va_arg(v, double);
|
|
|
|
+ obj = [NSNumber numberWithDouble:actual];
|
|
|
|
+ } else if (strcmp(type, @encode(float)) == 0) {
|
|
|
|
+ float actual = (float)va_arg(v, double);
|
|
|
|
+ obj = [NSNumber numberWithFloat:actual];
|
|
|
|
+ } else if (strcmp(type, @encode(int)) == 0) {
|
|
|
|
+ int actual = (int)va_arg(v, int);
|
|
|
|
+ obj = [NSNumber numberWithInt:actual];
|
|
|
|
+ } else if (strcmp(type, @encode(long)) == 0) {
|
|
|
|
+ long actual = (long)va_arg(v, long);
|
|
|
|
+ obj = [NSNumber numberWithLong:actual];
|
|
|
|
+ } else if (strcmp(type, @encode(long long)) == 0) {
|
|
|
|
+ long long actual = (long long)va_arg(v, long long);
|
|
|
|
+ obj = [NSNumber numberWithLongLong:actual];
|
|
|
|
+ } else if (strcmp(type, @encode(short)) == 0) {
|
|
|
|
+ short actual = (short)va_arg(v, int);
|
|
|
|
+ obj = [NSNumber numberWithShort:actual];
|
|
|
|
+ } else if (strcmp(type, @encode(unsigned char)) == 0) {
|
|
|
|
+ unsigned char actual = (unsigned char)va_arg(v, unsigned int);
|
|
|
|
+ obj = [NSNumber numberWithUnsignedChar:actual];
|
|
|
|
+ } else if (strcmp(type, @encode(unsigned int)) == 0) {
|
|
|
|
+ unsigned int actual = (int)va_arg(v, unsigned int);
|
|
|
|
+ obj = [NSNumber numberWithUnsignedInt:actual];
|
|
|
|
+ } else if (strcmp(type, @encode(unsigned long)) == 0) {
|
|
|
|
+ unsigned long actual = (unsigned long)va_arg(v, unsigned long);
|
|
|
|
+ obj = [NSNumber numberWithUnsignedLong:actual];
|
|
|
|
+ } else if (strcmp(type, @encode(unsigned long long)) == 0) {
|
|
|
|
+ unsigned long long actual = (unsigned long long)va_arg(v, unsigned long long);
|
|
|
|
+ obj = [NSNumber numberWithUnsignedLongLong:actual];
|
|
|
|
+ } else if (strcmp(type, @encode(unsigned short)) == 0) {
|
|
|
|
+ unsigned short actual = (unsigned short)va_arg(v, unsigned int);
|
|
|
|
+ obj = [NSNumber numberWithUnsignedShort:actual];
|
|
|
|
+ }
|
|
|
|
+ va_end(v);
|
|
|
|
+ return obj;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+#define MASBoxValue(value) _MASBoxValue(@encode(__typeof__((value))), (value))
|