aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/objc
diff options
context:
space:
mode:
authorGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2013-03-29 20:03:14 -0700
committerGravatar Hoa V. DINH <dinh.viet.hoa@gmail.com>2013-03-29 20:03:14 -0700
commitc51a8a2b44e6934de9d45d74ddec4b70b00f1abb (patch)
treeeec1e324fa1384f054aa8f73a52ec11c1e9dc396 /src/objc
parent8adf0c2d16d1567ff830bf72460cb75deb7eb022 (diff)
Build for iOS.
Diffstat (limited to 'src/objc')
-rw-r--r--src/objc/utils/MCOObjectWrapper.mm15
-rw-r--r--src/objc/utils/NSArray+MCO.mm5
-rw-r--r--src/objc/utils/NSData+MCO.mm5
-rw-r--r--src/objc/utils/NSDictionary+MCO.mm5
-rw-r--r--src/objc/utils/NSObject+MCO.mm20
-rw-r--r--src/objc/utils/NSString+MCO.mm5
-rw-r--r--src/objc/utils/NSValue+MCO.mm5
7 files changed, 57 insertions, 3 deletions
diff --git a/src/objc/utils/MCOObjectWrapper.mm b/src/objc/utils/MCOObjectWrapper.mm
index e4fda2ae..e0a162b4 100644
--- a/src/objc/utils/MCOObjectWrapper.mm
+++ b/src/objc/utils/MCOObjectWrapper.mm
@@ -8,13 +8,26 @@
#import "MCOObjectWrapper.h"
+#include <typeinfo>
+
#include "MCUtils.h"
-#include "MCObject.h"
+#include "MCBaseTypes.h"
+
+#import "NSObject+MCO.h"
@implementation MCOObjectWrapper {
mailcore::Object * mObject;
}
++ (void) load
+{
+ MCORegisterClass([NSValue class], &typeid(mailcore::Value));
+ MCORegisterClass([NSData class], &typeid(mailcore::Data));
+ MCORegisterClass([NSString class], &typeid(mailcore::String));
+ MCORegisterClass([NSDictionary class], &typeid(mailcore::HashMap));
+ MCORegisterClass([NSArray class], &typeid(mailcore::Array));
+}
+
- (void) dealloc
{
MC_SAFE_RELEASE(mObject);
diff --git a/src/objc/utils/NSArray+MCO.mm b/src/objc/utils/NSArray+MCO.mm
index 4b9eaab7..0b8b21bf 100644
--- a/src/objc/utils/NSArray+MCO.mm
+++ b/src/objc/utils/NSArray+MCO.mm
@@ -14,6 +14,11 @@
@implementation NSArray (MCO)
++ (id) mco_objectWithMCObject:(mailcore::Object *)object
+{
+ return [self mco_arrayWithMCArray:(mailcore::Array *) object];
+}
+
+ (NSArray *) mco_arrayWithMCArray:(mailcore::Array *)array
{
NSMutableArray * result = [NSMutableArray array];
diff --git a/src/objc/utils/NSData+MCO.mm b/src/objc/utils/NSData+MCO.mm
index dd279554..daea94c9 100644
--- a/src/objc/utils/NSData+MCO.mm
+++ b/src/objc/utils/NSData+MCO.mm
@@ -12,6 +12,11 @@
@implementation NSData (MCO)
++ (id) mco_objectWithMCObject:(mailcore::Object *)object
+{
+ return [self mco_dataWithMCData:(mailcore::Data *) object];
+}
+
+ (NSData *) mco_dataWithMCData:(mailcore::Data *)cppData
{
if (cppData == NULL)
diff --git a/src/objc/utils/NSDictionary+MCO.mm b/src/objc/utils/NSDictionary+MCO.mm
index 8ba2f7a5..5745955a 100644
--- a/src/objc/utils/NSDictionary+MCO.mm
+++ b/src/objc/utils/NSDictionary+MCO.mm
@@ -14,6 +14,11 @@
@implementation NSDictionary (MCO)
++ (id) mco_objectWithMCObject:(mailcore::Object *)object
+{
+ return [self mco_dictionaryWithMCHashMap:(mailcore::HashMap *) object];
+}
+
+ (NSDictionary *) mco_dictionaryWithMCHashMap:(mailcore::HashMap *)hashmap
{
NSMutableDictionary * result = [NSMutableDictionary dictionary];
diff --git a/src/objc/utils/NSObject+MCO.mm b/src/objc/utils/NSObject+MCO.mm
index 27a9befe..5f1726e2 100644
--- a/src/objc/utils/NSObject+MCO.mm
+++ b/src/objc/utils/NSObject+MCO.mm
@@ -31,11 +31,16 @@ void MCORegisterClass(Class aClass, const std::type_info * info)
{
init();
- size_t hash_value = info->hash_code();
chashdatum key;
chashdatum value;
+#ifdef __LIBCPP_TYPEINFO
+ size_t hash_value = info->hash_code();
key.data = &hash_value;
key.len = sizeof(hash_value);
+#else
+ key.data = (void *) info->name();
+ key.len = strlen(info->name());
+#endif
value.data = aClass;
value.len = 0;
chash_set(classHash, &key, &value, NULL);
@@ -45,12 +50,17 @@ static Class classWithTypeInfo(const std::type_info * info)
{
init();
- size_t hash_value = info->hash_code();
int r;
chashdatum key;
chashdatum value;
+#ifdef __LIBCPP_TYPEINFO
+ size_t hash_value = info->hash_code();
key.data = &hash_value;
key.len = sizeof(hash_value);
+#else
+ key.data = (void *) info->name();
+ key.len = strlen(info->name());
+#endif
r = chash_get(classHash, &key, &value);
if (r < 0)
return nil;
@@ -66,6 +76,7 @@ static Class classWithTypeInfo(const std::type_info * info)
return nil;
//fprintf(stderr, "typeid: %i %i\n", typeid(* object).hash_code(), typeid(mailcore::Array).hash_code());
+#ifdef __LIBCPP_TYPEINFO
size_t objectType = typeid(* object).hash_code();
if (objectType == typeid(mailcore::Value).hash_code()) {
return [NSValue mco_valueWithMCValue:(mailcore::Value *) object];
@@ -87,6 +98,11 @@ static Class classWithTypeInfo(const std::type_info * info)
MCAssert(aClass != nil);
return [aClass mco_objectWithMCObject:object];
}
+#else
+ Class aClass = classWithTypeInfo(&typeid(* object));
+ MCAssert(aClass != nil);
+ return [aClass mco_objectWithMCObject:object];
+#endif
}
- (mailcore::Object *) mco_mcObject
diff --git a/src/objc/utils/NSString+MCO.mm b/src/objc/utils/NSString+MCO.mm
index 3d692b76..3b8253ce 100644
--- a/src/objc/utils/NSString+MCO.mm
+++ b/src/objc/utils/NSString+MCO.mm
@@ -12,6 +12,11 @@
@implementation NSString (MCO)
++ (id) mco_objectWithMCObject:(mailcore::Object *)object
+{
+ return [self mco_stringWithMCString:(mailcore::String *) object];
+}
+
+ (NSString *) mco_stringWithMCString:(mailcore::String *)cppString
{
if (cppString == NULL)
diff --git a/src/objc/utils/NSValue+MCO.mm b/src/objc/utils/NSValue+MCO.mm
index 81bcebd7..9781534a 100644
--- a/src/objc/utils/NSValue+MCO.mm
+++ b/src/objc/utils/NSValue+MCO.mm
@@ -14,6 +14,11 @@
@implementation NSValue (MCO)
++ (id) mco_objectWithMCObject:(mailcore::Object *)object
+{
+ return [self mco_valueWithMCValue:(mailcore::Value *) object];
+}
+
+ (NSNumber *) mco_valueWithMCValue:(mailcore::Value *)value
{
switch (value->type()) {