1#include <Python.h> 2#include "pyobjc-api.h" 3 4#import <Foundation/Foundation.h> 5 6@interface OC_TestNumber : NSObject {} 7+(Class)numberClass:(NSNumber*)number; 8+(BOOL)numberAsBOOL:(NSNumber*)number; 9+(char)numberAsChar:(NSNumber*)number; 10+(short)numberAsShort:(NSNumber*)number; 11+(int)numberAsInt:(NSNumber*)number; 12+(long)numberAsLong:(NSNumber*)number; 13+(long long)numberAsLongLong:(NSNumber*)number; 14+(unsigned char)numberAsUnsignedChar:(NSNumber*)number; 15+(unsigned short)numberAsUnsignedShort:(NSNumber*)number; 16+(unsigned int)numberAsUnsignedInt:(NSNumber*)number; 17+(unsigned long)numberAsUnsignedLong:(NSNumber*)number; 18+(unsigned long long)numberAsUnsignedLongLong:(NSNumber*)number; 19+(NSDecimal)numberAsDecimal:(NSNumber*)number; 20+(float)numberAsFloat:(NSNumber*)number; 21+(double)numberAsDouble:(NSNumber*)number; 22 23+(const char*)objCTypeOf:(NSNumber*)number; 24+(int)compareA:(NSNumber*)a andB:(NSNumber*)b; 25+(BOOL)number:(NSNumber*)a isEqualTo:(NSNumber*)b; 26+(NSString*)numberDescription:(NSNumber*)number; 27+(NSString*)numberDescription:(NSNumber*)number withLocale:(id)aLocale; 28@end 29 30@implementation OC_TestNumber 31 32+(Class)numberClass:(NSNumber*)number 33{ 34 return [number class]; 35} 36 37+(const char*)objCTypeOf:(NSNumber*)number 38{ 39 return [number objCType]; 40} 41 42+(int)compareA:(NSNumber*)a andB:(NSNumber*)b 43{ 44 return [a compare:b]; 45} 46 47+(BOOL)number:(NSNumber*)a isEqualTo:(NSNumber*)b 48{ 49 return [a isEqualToNumber:b]; 50} 51 52+(NSString*)numberDescription:(NSNumber*)number 53{ 54 return [number description]; 55} 56 57+(NSString*)numberAsString:(NSNumber*)number 58{ 59 return [number stringValue]; 60} 61 62+(NSString*)numberDescription:(NSNumber*)number withLocale:(id)aLocale 63{ 64 return [number descriptionWithLocale:aLocale]; 65} 66 67+(BOOL)numberAsBOOL:(NSNumber*)number 68{ 69 return [number boolValue]; 70} 71 72+(char)numberAsChar:(NSNumber*)number 73{ 74 return [number charValue]; 75} 76 77+(short)numberAsShort:(NSNumber*)number 78{ 79 return [number shortValue]; 80} 81 82+(int)numberAsInt:(NSNumber*)number 83{ 84 return [number intValue]; 85} 86 87+(long)numberAsLong:(NSNumber*)number 88{ 89 return [number longValue]; 90} 91 92+(long long)numberAsLongLong:(NSNumber*)number 93{ 94 return [number longLongValue]; 95} 96 97+(unsigned char)numberAsUnsignedChar:(NSNumber*)number 98{ 99 return [number unsignedCharValue]; 100} 101 102+(unsigned short)numberAsUnsignedShort:(NSNumber*)number 103{ 104 return [number unsignedShortValue]; 105} 106 107+(unsigned int)numberAsUnsignedInt:(NSNumber*)number 108{ 109 return [number unsignedIntValue]; 110} 111 112+(unsigned long)numberAsUnsignedLong:(NSNumber*)number 113{ 114 return [number unsignedLongValue]; 115} 116 117+(unsigned long long)numberAsUnsignedLongLong:(NSNumber*)number 118{ 119 return [number unsignedLongLongValue]; 120} 121 122+(NSDecimal)numberAsDecimal:(NSNumber*)number 123{ 124 return [number decimalValue]; 125} 126 127+(float)numberAsFloat:(NSNumber*)number 128{ 129 return [number floatValue]; 130} 131 132+(double)numberAsDouble:(NSNumber*)number 133{ 134 return [number doubleValue]; 135} 136 137 138@end 139 140 141static PyMethodDef mod_methods[] = { 142 { 0, 0, 0, 0 } 143}; 144 145#if PY_VERSION_HEX >= 0x03000000 146 147static struct PyModuleDef mod_module = { 148 PyModuleDef_HEAD_INIT, 149 "pythonnumber", 150 NULL, 151 0, 152 mod_methods, 153 NULL, 154 NULL, 155 NULL, 156 NULL 157}; 158 159#define INITERROR() return NULL 160#define INITDONE() return m 161 162PyObject* PyInit_pythonnumber(void); 163 164PyObject* 165PyInit_pythonnumber(void) 166 167#else 168 169#define INITERROR() return 170#define INITDONE() return 171 172void initpythonnumber(void); 173 174void 175initpythonnumber(void) 176#endif 177{ 178 PyObject* m; 179 180#if PY_VERSION_HEX >= 0x03000000 181 m = PyModule_Create(&mod_module); 182#else 183 m = Py_InitModule4("pythonnumber", mod_methods, 184 NULL, NULL, PYTHON_API_VERSION); 185#endif 186 if (!m) { 187 INITERROR(); 188 } 189 190 if (PyObjC_ImportAPI(m) < 0) { 191 INITERROR(); 192 } 193 194 if (PyModule_AddObject(m, "OC_TestNumber", 195 PyObjCClass_New([OC_TestNumber class])) < 0){ 196 INITERROR(); 197 } 198 199 INITDONE(); 200} 201