aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--build-mac/mailcore2.xcodeproj/project.pbxproj82
-rw-r--r--src/core/abstract/MCAbstractMessagePart.h10
-rw-r--r--src/core/abstract/MCAbstractMultipart.h9
-rw-r--r--src/core/basetypes/MCValue.cc25
-rw-r--r--src/core/basetypes/MCValue.h3
-rw-r--r--src/core/basetypes/MCValuePrivate.h31
-rw-r--r--src/objc/MCObjC.h6
-rw-r--r--src/objc/abstract/MCOAbstract.h19
-rw-r--r--src/objc/abstract/MCOAbstractMessage.h21
-rw-r--r--src/objc/abstract/MCOAbstractMessage.mm65
-rw-r--r--src/objc/abstract/MCOAbstractMessagePart.h19
-rw-r--r--src/objc/abstract/MCOAbstractMessagePart.mm39
-rw-r--r--src/objc/abstract/MCOAbstractMultipart.h16
-rw-r--r--src/objc/abstract/MCOAbstractMultipart.mm27
-rw-r--r--src/objc/abstract/MCOAbstractPart+Private.h23
-rw-r--r--src/objc/abstract/MCOAbstractPart.h36
-rw-r--r--src/objc/abstract/MCOAbstractPart.mm142
-rw-r--r--src/objc/abstract/MCOAddress.mm14
-rw-r--r--src/objc/abstract/MCOMessageHeader.mm13
-rw-r--r--src/objc/imap/MCOIMAP.h11
-rw-r--r--src/objc/utils/NSArray+MCO.h2
-rw-r--r--src/objc/utils/NSArray+MCO.mm9
-rw-r--r--src/objc/utils/NSDictionary+MCO.h2
-rw-r--r--src/objc/utils/NSDictionary+MCO.mm14
-rw-r--r--src/objc/utils/NSObject+MCO.h11
-rw-r--r--src/objc/utils/NSObject+MCO.mm73
-rw-r--r--src/objc/utils/NSValue+MCO.h25
-rw-r--r--src/objc/utils/NSValue+MCO.mm100
28 files changed, 811 insertions, 36 deletions
diff --git a/build-mac/mailcore2.xcodeproj/project.pbxproj b/build-mac/mailcore2.xcodeproj/project.pbxproj
index c94968d0..e4f9de28 100644
--- a/build-mac/mailcore2.xcodeproj/project.pbxproj
+++ b/build-mac/mailcore2.xcodeproj/project.pbxproj
@@ -65,6 +65,22 @@
C64BB22E16E5C1EE000DB34C /* MCIndexSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64BB22C16E5C1EE000DB34C /* MCIndexSet.cpp */; };
C64BB22F16E885C3000DB34C /* MCIndexSet.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB22D16E5C1EE000DB34C /* MCIndexSet.h */; };
C64BB23016E8876F000DB34C /* MCIMAPCapabilityOperation.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB22A16E5C0A3000DB34C /* MCIMAPCapabilityOperation.h */; };
+ C64BB23516EDAA17000DB34C /* MCOAbstractMessage.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB23416EDAA17000DB34C /* MCOAbstractMessage.mm */; };
+ C64BB23916EDAA3F000DB34C /* MCOAbstractMessagePart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB23816EDAA3F000DB34C /* MCOAbstractMessagePart.mm */; };
+ C64BB23C16EDAAC7000DB34C /* MCOAbstractMultipart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB23B16EDAAC7000DB34C /* MCOAbstractMultipart.mm */; };
+ C64BB23F16EDAAE1000DB34C /* MCOAbstractPart.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB23E16EDAAE1000DB34C /* MCOAbstractPart.mm */; };
+ C64BB24216EDAAF4000DB34C /* MCOAddress.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB24116EDAAF3000DB34C /* MCOAddress.mm */; };
+ C64BB24516EDAAFE000DB34C /* MCOMessageHeader.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB24416EDAAFE000DB34C /* MCOMessageHeader.mm */; };
+ C64BB24716EEFCB9000DB34C /* MCOAbstract.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB23616EDAA2B000DB34C /* MCOAbstract.h */; };
+ C64BB24816EEFCBC000DB34C /* MCOAbstractMessage.mm in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB23416EDAA17000DB34C /* MCOAbstractMessage.mm */; };
+ C64BB24916EEFCBE000DB34C /* MCOAbstractMessagePart.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB23716EDAA3F000DB34C /* MCOAbstractMessagePart.h */; };
+ C64BB24A16EEFCBF000DB34C /* MCOAbstractMultipart.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB23A16EDAAC7000DB34C /* MCOAbstractMultipart.h */; };
+ C64BB24B16EEFCC1000DB34C /* MCOAbstractPart.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB23D16EDAAE0000DB34C /* MCOAbstractPart.h */; };
+ C64BB24C16EEFCC2000DB34C /* MCOAddress.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB24016EDAAF3000DB34C /* MCOAddress.h */; };
+ C64BB24D16EEFCC4000DB34C /* MCOMessageHeader.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB24316EDAAFD000DB34C /* MCOMessageHeader.h */; };
+ C64BB25216FC284A000DB34C /* NSValue+MCO.mm in Sources */ = {isa = PBXBuildFile; fileRef = C64BB25116FC2848000DB34C /* NSValue+MCO.mm */; };
+ C64BB25516FD32FB000DB34C /* MCOIMAP.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB25416FD32A0000DB34C /* MCOIMAP.h */; };
+ C64BB25616FD333C000DB34C /* MCOAbstractMessage.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = C64BB23316EDAA17000DB34C /* MCOAbstractMessage.h */; };
C64EA6F4169E847800778456 /* MCAbstractMessage.cc in Sources */ = {isa = PBXBuildFile; fileRef = C64EA694169E847800778456 /* MCAbstractMessage.cc */; };
C64EA6F6169E847800778456 /* MCAbstractMessagePart.cc in Sources */ = {isa = PBXBuildFile; fileRef = C64EA696169E847800778456 /* MCAbstractMessagePart.cc */; };
C64EA6F8169E847800778456 /* MCAbstractMultipart.cc in Sources */ = {isa = PBXBuildFile; fileRef = C64EA698169E847800778456 /* MCAbstractMultipart.cc */; };
@@ -221,6 +237,8 @@
files = (
C63CD68E16BE324100DB18F1 /* MCOFetchFoldersOperation.h in CopyFiles */,
C63CD68C16BE1BC800DB18F1 /* MCHTMLRendererCallback.h in CopyFiles */,
+ C64BB24816EEFCBC000DB34C /* MCOAbstractMessage.mm in CopyFiles */,
+ C64EA74F169E859600778456 /* MCAbstractMessage.h in CopyFiles */,
C63CD68816BE1BBF00DB18F1 /* MCAddressDisplay.h in CopyFiles */,
C63CD68D16BE1BCA00DB18F1 /* MCRenderer.h in CopyFiles */,
C64BB22F16E885C3000DB34C /* MCIndexSet.h in CopyFiles */,
@@ -228,7 +246,14 @@
C62C6EE016A696AB00737497 /* MCAsyncIMAP.h in CopyFiles */,
C63CD68B16BE1BC600DB18F1 /* MCHTMLRenderer.h in CopyFiles */,
C63CD68A16BE1BC400DB18F1 /* MCSizeFormatter.h in CopyFiles */,
+ C64BB24C16EEFCC2000DB34C /* MCOAddress.h in CopyFiles */,
+ C64BB25616FD333C000DB34C /* MCOAbstractMessage.h in CopyFiles */,
+ C64BB24716EEFCB9000DB34C /* MCOAbstract.h in CopyFiles */,
+ C64BB24A16EEFCBF000DB34C /* MCOAbstractMultipart.h in CopyFiles */,
C63CD68916BE1BC100DB18F1 /* MCDateFormatter.h in CopyFiles */,
+ C64BB24916EEFCBE000DB34C /* MCOAbstractMessagePart.h in CopyFiles */,
+ C64BB24D16EEFCC4000DB34C /* MCOMessageHeader.h in CopyFiles */,
+ C64BB24B16EEFCC1000DB34C /* MCOAbstractPart.h in CopyFiles */,
C6EB30DE16B5B8050091F4F1 /* MCObjC.h in CopyFiles */,
C6EB310216B8E7D60091F4F1 /* NSObject+MCO.h in CopyFiles */,
C6EB310316B8E7D80091F4F1 /* NSArray+MCO.h in CopyFiles */,
@@ -236,10 +261,10 @@
C6EB30F816B8DED30091F4F1 /* NSDictionary+MCO.h in CopyFiles */,
C64EA74E169E859600778456 /* MCAbstract.h in CopyFiles */,
C6D42C2A16AE0507002BB4F9 /* NSData+MCO.h in CopyFiles */,
+ C64BB25516FD32FB000DB34C /* MCOIMAP.h in CopyFiles */,
C62C6F0016A7E32800737497 /* MCPOPFetchHeaderOperation.h in CopyFiles */,
C6D42C2C16AE0509002BB4F9 /* NSString+MCO.h in CopyFiles */,
C62C6EE216A696B400737497 /* MCIMAPFetchFoldersOperation.h in CopyFiles */,
- C64EA74F169E859600778456 /* MCAbstractMessage.h in CopyFiles */,
C64EA7E516A14A5400778456 /* MCAsync.h in CopyFiles */,
C64EA750169E859600778456 /* MCAbstractMessagePart.h in CopyFiles */,
C62C6EDB16A3FC8700737497 /* MCIMAPOperation.h in CopyFiles */,
@@ -382,6 +407,26 @@
C64BB22A16E5C0A3000DB34C /* MCIMAPCapabilityOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPCapabilityOperation.h; sourceTree = "<group>"; };
C64BB22C16E5C1EE000DB34C /* MCIndexSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCIndexSet.cpp; sourceTree = "<group>"; };
C64BB22D16E5C1EE000DB34C /* MCIndexSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIndexSet.h; sourceTree = "<group>"; };
+ C64BB23316EDAA17000DB34C /* MCOAbstractMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOAbstractMessage.h; sourceTree = "<group>"; };
+ C64BB23416EDAA17000DB34C /* MCOAbstractMessage.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOAbstractMessage.mm; sourceTree = "<group>"; };
+ C64BB23616EDAA2B000DB34C /* MCOAbstract.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCOAbstract.h; sourceTree = "<group>"; };
+ C64BB23716EDAA3F000DB34C /* MCOAbstractMessagePart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOAbstractMessagePart.h; sourceTree = "<group>"; };
+ C64BB23816EDAA3F000DB34C /* MCOAbstractMessagePart.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOAbstractMessagePart.mm; sourceTree = "<group>"; };
+ C64BB23A16EDAAC7000DB34C /* MCOAbstractMultipart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOAbstractMultipart.h; sourceTree = "<group>"; };
+ C64BB23B16EDAAC7000DB34C /* MCOAbstractMultipart.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOAbstractMultipart.mm; sourceTree = "<group>"; };
+ C64BB23D16EDAAE0000DB34C /* MCOAbstractPart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOAbstractPart.h; sourceTree = "<group>"; };
+ C64BB23E16EDAAE1000DB34C /* MCOAbstractPart.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOAbstractPart.mm; sourceTree = "<group>"; };
+ C64BB24016EDAAF3000DB34C /* MCOAddress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOAddress.h; sourceTree = "<group>"; };
+ C64BB24116EDAAF3000DB34C /* MCOAddress.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOAddress.mm; sourceTree = "<group>"; };
+ C64BB24316EDAAFD000DB34C /* MCOMessageHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCOMessageHeader.h; sourceTree = "<group>"; };
+ C64BB24416EDAAFE000DB34C /* MCOMessageHeader.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MCOMessageHeader.mm; sourceTree = "<group>"; };
+ C64BB24616EEF89D000DB34C /* MCOAddress+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MCOAddress+Private.h"; sourceTree = "<group>"; };
+ C64BB24E16EEFFE2000DB34C /* MCOMessageHeader+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MCOMessageHeader+Private.h"; sourceTree = "<group>"; };
+ C64BB24F16FBEF0E000DB34C /* MCOAbstractPart+Private.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MCOAbstractPart+Private.h"; sourceTree = "<group>"; };
+ C64BB25016FC2846000DB34C /* NSValue+MCO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSValue+MCO.h"; sourceTree = "<group>"; };
+ C64BB25116FC2848000DB34C /* NSValue+MCO.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "NSValue+MCO.mm"; sourceTree = "<group>"; };
+ C64BB25316FC2AA0000DB34C /* MCValuePrivate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCValuePrivate.h; sourceTree = "<group>"; };
+ C64BB25416FD32A0000DB34C /* MCOIMAP.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MCOIMAP.h; sourceTree = "<group>"; };
C64EA537169E772200778456 /* libmailcore2.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libmailcore2.a; sourceTree = BUILT_PRODUCTS_DIR; };
C64EA68C169E847800778456 /* MCIMAPAsyncConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MCIMAPAsyncConnection.h; sourceTree = "<group>"; };
C64EA68F169E847800778456 /* MCSMTPAsyncSession.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MCSMTPAsyncSession.cc; sourceTree = "<group>"; };
@@ -583,6 +628,29 @@
path = renderer;
sourceTree = "<group>";
};
+ C64BB23216EDA9E8000DB34C /* abstract */ = {
+ isa = PBXGroup;
+ children = (
+ C64BB23616EDAA2B000DB34C /* MCOAbstract.h */,
+ C64BB23316EDAA17000DB34C /* MCOAbstractMessage.h */,
+ C64BB23416EDAA17000DB34C /* MCOAbstractMessage.mm */,
+ C64BB23716EDAA3F000DB34C /* MCOAbstractMessagePart.h */,
+ C64BB23816EDAA3F000DB34C /* MCOAbstractMessagePart.mm */,
+ C64BB23A16EDAAC7000DB34C /* MCOAbstractMultipart.h */,
+ C64BB23B16EDAAC7000DB34C /* MCOAbstractMultipart.mm */,
+ C64BB23D16EDAAE0000DB34C /* MCOAbstractPart.h */,
+ C64BB24F16FBEF0E000DB34C /* MCOAbstractPart+Private.h */,
+ C64BB23E16EDAAE1000DB34C /* MCOAbstractPart.mm */,
+ C64BB24016EDAAF3000DB34C /* MCOAddress.h */,
+ C64BB24616EEF89D000DB34C /* MCOAddress+Private.h */,
+ C64BB24116EDAAF3000DB34C /* MCOAddress.mm */,
+ C64BB24316EDAAFD000DB34C /* MCOMessageHeader.h */,
+ C64BB24E16EEFFE2000DB34C /* MCOMessageHeader+Private.h */,
+ C64BB24416EDAAFE000DB34C /* MCOMessageHeader.mm */,
+ );
+ path = abstract;
+ sourceTree = "<group>";
+ };
C64EA52C169E772200778456 = {
isa = PBXGroup;
children = (
@@ -781,6 +849,7 @@
C64EA6B9169E847800778456 /* MCUtils.h */,
C64EA6BA169E847800778456 /* MCValue.cc */,
C64EA6BB169E847800778456 /* MCValue.h */,
+ C64BB25316FC2AA0000DB34C /* MCValuePrivate.h */,
C64EA6BC169E847800778456 /* MCMainThread.h */,
C64EA6BD169E847800778456 /* MCMainThread.mm */,
C64EA6BE169E847800778456 /* MCOperation.cc */,
@@ -888,6 +957,7 @@
C6D42C0016ADF5AF002BB4F9 /* objc */ = {
isa = PBXGroup;
children = (
+ C64BB23216EDA9E8000DB34C /* abstract */,
F8EA941316BAED500011AC6F /* imap */,
C6D42C1816AE03D6002BB4F9 /* utils */,
C6EB30DC16B5B7770091F4F1 /* MCObjC.h */,
@@ -911,6 +981,8 @@
C6EB30F616B8C9480091F4F1 /* NSDictionary+MCO.mm */,
C6EB30FD16B8E50F0091F4F1 /* NSArray+MCO.h */,
C6EB30FC16B8E50F0091F4F1 /* NSArray+MCO.mm */,
+ C64BB25016FC2846000DB34C /* NSValue+MCO.h */,
+ C64BB25116FC2848000DB34C /* NSValue+MCO.mm */,
C6EB30FF16B8E6E50091F4F1 /* NSObject+MCO.h */,
C6EB310016B8E6E50091F4F1 /* NSObject+MCO.mm */,
);
@@ -920,6 +992,7 @@
F8EA941316BAED500011AC6F /* imap */ = {
isa = PBXGroup;
children = (
+ C64BB25416FD32A0000DB34C /* MCOIMAP.h */,
F8EA941416BAED6E0011AC6F /* MCOIMAPSession.h */,
C07AD057D3C8FBDC7AC95733 /* MCOIMAPSession.mm */,
C07AD7F5AFD80134A72B2CDA /* MCOOperation.h */,
@@ -1109,6 +1182,13 @@
C64BB22116E34DCB000DB34C /* MCIMAPSyncResult.cpp in Sources */,
C64BB22B16E5C0A4000DB34C /* MCIMAPCapabilityOperation.cpp in Sources */,
C64BB22E16E5C1EE000DB34C /* MCIndexSet.cpp in Sources */,
+ C64BB23516EDAA17000DB34C /* MCOAbstractMessage.mm in Sources */,
+ C64BB23916EDAA3F000DB34C /* MCOAbstractMessagePart.mm in Sources */,
+ C64BB23C16EDAAC7000DB34C /* MCOAbstractMultipart.mm in Sources */,
+ C64BB23F16EDAAE1000DB34C /* MCOAbstractPart.mm in Sources */,
+ C64BB24216EDAAF4000DB34C /* MCOAddress.mm in Sources */,
+ C64BB24516EDAAFE000DB34C /* MCOMessageHeader.mm in Sources */,
+ C64BB25216FC284A000DB34C /* NSValue+MCO.mm in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/src/core/abstract/MCAbstractMessagePart.h b/src/core/abstract/MCAbstractMessagePart.h
index 789f7676..1bc6981e 100644
--- a/src/core/abstract/MCAbstractMessagePart.h
+++ b/src/core/abstract/MCAbstractMessagePart.h
@@ -22,16 +22,16 @@ namespace mailcore {
virtual AbstractPart * mainPart();
virtual void setMainPart(AbstractPart * mainPart);
- virtual void setMessage(AbstractMessage * message);
-
- virtual AbstractPart * partForContentID(String * contentID);
- virtual AbstractPart * partForUniqueID(String * uniqueID);
-
public: //subclass behavior
AbstractMessagePart(AbstractMessagePart * other);
virtual String * description();
virtual Object * copy();
+ virtual void setMessage(AbstractMessage * message);
+
+ virtual AbstractPart * partForContentID(String * contentID);
+ virtual AbstractPart * partForUniqueID(String * uniqueID);
+
private:
AbstractPart * mMainPart;
MessageHeader * mHeader;
diff --git a/src/core/abstract/MCAbstractMultipart.h b/src/core/abstract/MCAbstractMultipart.h
index d5d5f343..ca2a163b 100644
--- a/src/core/abstract/MCAbstractMultipart.h
+++ b/src/core/abstract/MCAbstractMultipart.h
@@ -17,15 +17,14 @@ namespace mailcore {
virtual Array * parts();
virtual void setParts(Array * parts);
- virtual void setMessage(AbstractMessage * message);
-
- virtual AbstractPart * partForContentID(String * contentID);
- virtual AbstractPart * partForUniqueID(String * uniqueID);
-
public: //subclass behavior
AbstractMultipart(AbstractMultipart * other);
virtual String * description();
virtual Object * copy();
+
+ virtual void setMessage(AbstractMessage * message);
+ virtual AbstractPart * partForContentID(String * contentID);
+ virtual AbstractPart * partForUniqueID(String * uniqueID);
private:
Array * mParts;
diff --git a/src/core/basetypes/MCValue.cc b/src/core/basetypes/MCValue.cc
index b450e3e3..88e3e9f2 100644
--- a/src/core/basetypes/MCValue.cc
+++ b/src/core/basetypes/MCValue.cc
@@ -1,4 +1,5 @@
#include "MCValue.h"
+#include "MCValuePrivate.h"
#include <string.h>
#include <stdlib.h>
@@ -9,25 +10,6 @@
using namespace mailcore;
-enum {
- VALUE_TYPE_NONE,
- VALUE_TYPE_BOOL_VALUE,
- VALUE_TYPE_CHAR_VALUE,
- VALUE_TYPE_UNSIGNED_CHAR_VALUE,
- VALUE_TYPE_SHORT_VALUE,
- VALUE_TYPE_UNSIGNED_SHORT_VALUE,
- VALUE_TYPE_INT_VALUE,
- VALUE_TYPE_UNSIGNED_INT_VALUE,
- VALUE_TYPE_LONG_VALUE,
- VALUE_TYPE_UNSIGNED_LONG_VALUE,
- VALUE_TYPE_LONG_LONG_VALUE,
- VALUE_TYPE_UNSIGNED_LONG_LONG_VALUE,
- VALUE_TYPE_FLOAT_VALUE,
- VALUE_TYPE_DOUBLE_VALUE,
- VALUE_TYPE_POINTER_VALUE,
- VALUE_TYPE_DATA_VALUE,
-};
-
Value::Value()
{
mType = VALUE_TYPE_NONE;
@@ -305,3 +287,8 @@ void Value::dataValue(const char ** p_value, int * p_length)
* p_value = mValue.dataValue.data;
* p_length = mValue.dataValue.length;
}
+
+int Value::type()
+{
+ return mType;
+}
diff --git a/src/core/basetypes/MCValue.h b/src/core/basetypes/MCValue.h
index 3d66d661..52866235 100644
--- a/src/core/basetypes/MCValue.h
+++ b/src/core/basetypes/MCValue.h
@@ -74,6 +74,9 @@ namespace mailcore {
} dataValue;
} mValue;
Value();
+
+ public: // private
+ virtual int type();
};
diff --git a/src/core/basetypes/MCValuePrivate.h b/src/core/basetypes/MCValuePrivate.h
new file mode 100644
index 00000000..a4637f0a
--- /dev/null
+++ b/src/core/basetypes/MCValuePrivate.h
@@ -0,0 +1,31 @@
+//
+// MCValuePrivate.h
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 3/21/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#ifndef mailcore2_MCValuePrivate_h
+#define mailcore2_MCValuePrivate_h
+
+enum {
+ VALUE_TYPE_NONE,
+ VALUE_TYPE_BOOL_VALUE,
+ VALUE_TYPE_CHAR_VALUE,
+ VALUE_TYPE_UNSIGNED_CHAR_VALUE,
+ VALUE_TYPE_SHORT_VALUE,
+ VALUE_TYPE_UNSIGNED_SHORT_VALUE,
+ VALUE_TYPE_INT_VALUE,
+ VALUE_TYPE_UNSIGNED_INT_VALUE,
+ VALUE_TYPE_LONG_VALUE,
+ VALUE_TYPE_UNSIGNED_LONG_VALUE,
+ VALUE_TYPE_LONG_LONG_VALUE,
+ VALUE_TYPE_UNSIGNED_LONG_LONG_VALUE,
+ VALUE_TYPE_FLOAT_VALUE,
+ VALUE_TYPE_DOUBLE_VALUE,
+ VALUE_TYPE_POINTER_VALUE,
+ VALUE_TYPE_DATA_VALUE,
+};
+
+#endif
diff --git a/src/objc/MCObjC.h b/src/objc/MCObjC.h
index 8468d298..31aba9c1 100644
--- a/src/objc/MCObjC.h
+++ b/src/objc/MCObjC.h
@@ -19,12 +19,12 @@
#import <mailcore/NSObject+MCO.h>
#import <mailcore/MCOObjectWrapper.h>
#import <mailcore/NSError+MCO.h>
-#import <mailcore/MCOIMAPSession.h>
#import <mailcore/MCOOperation.h>
-#import <mailcore/MCOCheckAccountOperation.h>
-#import <mailcore/MCOFetchFoldersOperation.h>
#import <mailcore/MCOConstants.h>
+#import <mailcore/MCOAbstract.h>
+#import <mailcore/MCOIMAP.h>
+
#endif
#endif
diff --git a/src/objc/abstract/MCOAbstract.h b/src/objc/abstract/MCOAbstract.h
new file mode 100644
index 00000000..af257614
--- /dev/null
+++ b/src/objc/abstract/MCOAbstract.h
@@ -0,0 +1,19 @@
+//
+// MCOAbstract.h
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 3/10/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#ifndef mailcore2_MCOAbstract_h
+#define mailcore2_MCOAbstract_h
+
+#import <mailcore/MCOAbstractMessage.h>
+#import <mailcore/MCOAbstractMessagePart.h>
+#import <mailcore/MCOAbstractMultipart.h>
+#import <mailcore/MCOAbstractPart.h>
+#import <mailcore/MCOAddress.h>
+#import <mailcore/MCOMessageHeader.h>
+
+#endif
diff --git a/src/objc/abstract/MCOAbstractMessage.h b/src/objc/abstract/MCOAbstractMessage.h
new file mode 100644
index 00000000..60ed63cd
--- /dev/null
+++ b/src/objc/abstract/MCOAbstractMessage.h
@@ -0,0 +1,21 @@
+//
+// MCOAbstractMessage.h
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 3/10/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@class MCOMessageHeader;
+@class MCOAbstractPart;
+
+@interface MCOAbstractMessage : NSObject
+
+@property (nonatomic, retain) MCOMessageHeader * header;
+
+- (MCOAbstractPart *) partForContentID:(NSString *)contentID;
+- (MCOAbstractPart *) partForUniqueID:(NSString *)uniqueID;
+
+@end
diff --git a/src/objc/abstract/MCOAbstractMessage.mm b/src/objc/abstract/MCOAbstractMessage.mm
new file mode 100644
index 00000000..d9ab7a95
--- /dev/null
+++ b/src/objc/abstract/MCOAbstractMessage.mm
@@ -0,0 +1,65 @@
+//
+// MCOAbstractMessage.m
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 3/10/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import "MCOAbstractMessage.h"
+
+#include "MCAbstractMessage.h"
+#include "MCMessageHeader.h"
+#include "MCAbstractPart.h"
+
+#import "MCOMessageHeader.h"
+#import "MCOAbstractPart.h"
+#import "NSObject+MCO.h"
+#import "NSString+MCO.h"
+
+@implementation MCOAbstractMessage {
+ mailcore::AbstractMessage * _message;
+}
+
+- (id) initWithPart:(mailcore::AbstractMessage *)message
+{
+ self = [super init];
+
+ message->retain();
+ _message = message;
+
+ return self;
+}
+
+- (void) dealloc
+{
+ _message->release();
+ [super dealloc];
+}
+
+- (MCOMessageHeader *) header
+{
+ return (MCOMessageHeader *) [NSObject mco_objectWithMCObject:((mailcore::AbstractMessage *) [self mco_mcObject])->header()];
+}
+
+- (void) setHeader:(MCOMessageHeader *)header
+{
+ ((mailcore::AbstractMessage *) [self mco_mcObject])->setHeader((mailcore::MessageHeader *) [header mco_mcObject]);
+}
+
+- (MCOAbstractPart *) partForContentID:(NSString *)contentID
+{
+ return (MCOAbstractPart *) [NSObject mco_objectWithMCObject:((mailcore::AbstractMessage *) [self mco_mcObject])->partForContentID([contentID mco_mcString])];
+}
+
+- (MCOAbstractPart *) partForUniqueID:(NSString *)uniqueID
+{
+ return (MCOAbstractPart *) [NSObject mco_objectWithMCObject:((mailcore::AbstractMessage *) [self mco_mcObject])->partForUniqueID([uniqueID mco_mcString])];
+}
+
+- (mailcore::Object *) mco_mcObject
+{
+ return _message;
+}
+
+@end
diff --git a/src/objc/abstract/MCOAbstractMessagePart.h b/src/objc/abstract/MCOAbstractMessagePart.h
new file mode 100644
index 00000000..297df341
--- /dev/null
+++ b/src/objc/abstract/MCOAbstractMessagePart.h
@@ -0,0 +1,19 @@
+//
+// MCOAbstractMessagePart.h
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 3/10/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <mailcore/MCOAbstractPart.h>
+
+@class MCOMessageHeader;
+
+@interface MCOAbstractMessagePart : MCOAbstractPart
+
+@property (nonatomic, retain) MCOMessageHeader * header;
+@property (nonatomic, retain) MCOAbstractPart * mainPart;
+
+@end
diff --git a/src/objc/abstract/MCOAbstractMessagePart.mm b/src/objc/abstract/MCOAbstractMessagePart.mm
new file mode 100644
index 00000000..4468fd6f
--- /dev/null
+++ b/src/objc/abstract/MCOAbstractMessagePart.mm
@@ -0,0 +1,39 @@
+//
+// MCOAbstractMessagePart.m
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 3/10/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import "MCOAbstractMessagePart.h"
+
+#import "NSObject+MCO.h"
+#import "MCOMessageHeader.h"
+
+#include "MCAbstractMessagePart.h"
+#include "MCMessageHeader.h"
+
+@implementation MCOAbstractMessagePart
+
+- (void) setHeader:(MCOMessageHeader *)header
+{
+ ((mailcore::AbstractMessagePart *) [self mco_mcObject])->setHeader((mailcore::MessageHeader *) [header mco_mcObject]);
+}
+
+- (MCOMessageHeader *) header
+{
+ return (MCOMessageHeader *) [NSObject mco_objectWithMCObject:((mailcore::AbstractMessagePart *) [self mco_mcObject])->header()];
+}
+
+- (void) setMainPart:(MCOAbstractPart *)part
+{
+ ((mailcore::AbstractMessagePart *) [self mco_mcObject])->setMainPart((mailcore::AbstractPart *) [part mco_mcObject]);
+}
+
+- (MCOAbstractPart *) mainPart
+{
+ return (MCOAbstractPart *) [NSObject mco_objectWithMCObject:((mailcore::AbstractMessagePart *) [self mco_mcObject])->mainPart()];
+}
+
+@end
diff --git a/src/objc/abstract/MCOAbstractMultipart.h b/src/objc/abstract/MCOAbstractMultipart.h
new file mode 100644
index 00000000..37422d71
--- /dev/null
+++ b/src/objc/abstract/MCOAbstractMultipart.h
@@ -0,0 +1,16 @@
+//
+// MCOAbstractMultipart.h
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 3/10/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <mailcore/MCOAbstractPart.h>
+
+@interface MCOAbstractMultipart : MCOAbstractPart
+
+@property (nonatomic, copy) NSArray * parts;
+
+@end
diff --git a/src/objc/abstract/MCOAbstractMultipart.mm b/src/objc/abstract/MCOAbstractMultipart.mm
new file mode 100644
index 00000000..568471d1
--- /dev/null
+++ b/src/objc/abstract/MCOAbstractMultipart.mm
@@ -0,0 +1,27 @@
+//
+// MCOAbstractMultipart.m
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 3/10/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import "MCOAbstractMultipart.h"
+
+#include "MCAbstractMultipart.h"
+
+#import "NSObject+MCO.h"
+
+@implementation MCOAbstractMultipart
+
+- (NSArray *) parts
+{
+ return (NSArray *) [NSObject mco_objectWithMCObject:((mailcore::AbstractMultipart *) [self mco_mcObject])->parts()];
+}
+
+- (void) setParts:(NSArray *)parts
+{
+ ((mailcore::AbstractMultipart *) [self mco_mcObject])->setParts((mailcore::Array *) [parts mco_mcObject]);
+}
+
+@end
diff --git a/src/objc/abstract/MCOAbstractPart+Private.h b/src/objc/abstract/MCOAbstractPart+Private.h
new file mode 100644
index 00000000..abc20944
--- /dev/null
+++ b/src/objc/abstract/MCOAbstractPart+Private.h
@@ -0,0 +1,23 @@
+//
+// MCOAbstractPart+Private.h
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 3/21/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#include <mailcore/MCOAbstractPart.h>
+
+#ifdef __cplusplus
+
+namespace mailcore {
+ class AbstractPart;
+}
+
+@interface MCOAbstractPart (Private)
+
+- (id) initWithPart:(mailcore::AbstractPart *)part;
+
+@end
+
+#endif
diff --git a/src/objc/abstract/MCOAbstractPart.h b/src/objc/abstract/MCOAbstractPart.h
new file mode 100644
index 00000000..2ffcf338
--- /dev/null
+++ b/src/objc/abstract/MCOAbstractPart.h
@@ -0,0 +1,36 @@
+//
+// MCOAbstractPart.h
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 3/10/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@class MCOAbstractMessage;
+
+typedef enum {
+ MCOPartTypeSingle,
+ MCOPartTypeMessage,
+ MCOPartTypeMultipartMixed,
+ MCOPartTypeMultipartRelated,
+ MCOPartTypeMultipartAlternative,
+} MCOPartType;
+
+@interface MCOAbstractPart : NSObject
+
+@property (nonatomic, assign) MCOPartType partType;
+@property (nonatomic, copy) NSString * filename;
+@property (nonatomic, copy) NSString * mimeType;
+@property (nonatomic, copy) NSString * charset;
+@property (nonatomic, copy) NSString * uniqueID;
+@property (nonatomic, copy) NSString * contentID;
+@property (nonatomic, copy) NSString * contentLocation;
+@property (nonatomic, assign, getter=isInlineAttachment) BOOL inlineAttachment;
+@property (nonatomic, assign) MCOAbstractMessage * message;
+
+- (MCOAbstractPart *) partForContentID:(NSString *)contentID;
+- (MCOAbstractPart *) partForUniqueID:(NSString *)uniqueID;
+
+@end
diff --git a/src/objc/abstract/MCOAbstractPart.mm b/src/objc/abstract/MCOAbstractPart.mm
new file mode 100644
index 00000000..1e2f2ef7
--- /dev/null
+++ b/src/objc/abstract/MCOAbstractPart.mm
@@ -0,0 +1,142 @@
+//
+// MCOAbstractPart.m
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 3/10/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import "MCOAbstractPart.h"
+
+#include "MCAbstractPart.h"
+#include "MCAbstractMessage.h"
+
+#import "NSString+MCO.h"
+#import "NSObject+MCO.h"
+
+@implementation MCOAbstractPart {
+ mailcore::AbstractPart * _part;
+}
+
+- (id) initWithPart:(mailcore::AbstractPart *)part
+{
+ self = [super init];
+
+ part->retain();
+ _part = part;
+
+ return self;
+}
+
+- (void) dealloc
+{
+ _part->release();
+ [super dealloc];
+}
+
+- (MCOPartType) partType
+{
+ return (MCOPartType) _part->partType();
+}
+
+- (void) setPartType:(MCOPartType)partType
+{
+ _part->setPartType((mailcore::PartType) partType);
+}
+
+- (NSString *) filename
+{
+ return [NSString mco_stringWithMCString:_part->filename()];
+}
+
+- (void) setFilename:(NSString *)filename
+{
+ _part->setFilename([filename mco_mcString]);
+}
+
+- (NSString *) mimeType
+{
+ return [NSString mco_stringWithMCString:_part->mimeType()];
+}
+
+- (void) setMimeType:(NSString *)mimeType
+{
+ _part->setMimeType([mimeType mco_mcString]);
+}
+
+- (NSString *) charset
+{
+ return [NSString mco_stringWithMCString:_part->charset()];
+}
+
+- (void) setCharset:(NSString *)charset
+{
+ _part->setCharset([charset mco_mcString]);
+}
+
+- (NSString *) uniqueID
+{
+ return [NSString mco_stringWithMCString:_part->uniqueID()];
+}
+
+- (void) setUniqueID:(NSString *)uniqueID
+{
+ _part->setUniqueID([uniqueID mco_mcString]);
+}
+
+- (NSString *) contentID
+{
+ return [NSString mco_stringWithMCString:_part->contentID()];
+}
+
+- (void) setContentID:(NSString *)contentID
+{
+ _part->setContentID([contentID mco_mcString]);
+}
+
+- (NSString *) contentLocation
+{
+ return [NSString mco_stringWithMCString:_part->contentLocation()];
+}
+
+- (void) setContentLocation:(NSString *)contentLocation
+{
+ _part->setContentLocation([contentLocation mco_mcString]);
+}
+
+- (BOOL) isInlineAttachment
+{
+ return _part->isInlineAttachment();
+}
+
+- (void) setInlineAttachment:(BOOL)inlineAttachment
+{
+ _part->setInlineAttachment(inlineAttachment);
+}
+
+- (MCOAbstractMessage *) message
+{
+ return (MCOAbstractMessage *) [NSObject mco_objectWithMCObject:_part->message()];
+}
+
+- (void) setMessage:(MCOAbstractMessage *)message
+{
+ _part->setMessage((mailcore::AbstractMessage *) [message mco_mcObject]);
+}
+
+- (MCOAbstractPart *) partForContentID:(NSString *)contentID
+{
+ return (MCOAbstractPart *) [NSObject mco_objectWithMCObject:_part->partForContentID([contentID mco_mcString])];
+}
+
+- (MCOAbstractPart *) partForUniqueID:(NSString *)uniqueID
+{
+ return (MCOAbstractPart *) [NSObject mco_objectWithMCObject:_part->partForUniqueID([uniqueID mco_mcString])];
+}
+
+- (mailcore::Object *) mco_mcObject
+{
+ return _part;
+}
+
+@end
diff --git a/src/objc/abstract/MCOAddress.mm b/src/objc/abstract/MCOAddress.mm
index 58767fea..37727f0c 100644
--- a/src/objc/abstract/MCOAddress.mm
+++ b/src/objc/abstract/MCOAddress.mm
@@ -9,13 +9,27 @@
#import "MCOAddress.h"
#import "MCOAddress+Private.h"
+#include <typeinfo>
+
#include "MCAddress.h"
#include "NSString+MCO.h"
+#include "NSObject+MCO.h"
@implementation MCOAddress {
mailcore::Address * _nativeAddress;
}
++ (void) initialize
+{
+ MCORegisterClass(self, &typeid(mailcore::Address));
+}
+
++ (NSObject *) mco_objectWithMCObject:(mailcore::Object *)object
+{
+ mailcore::Address * address = (mailcore::Address *) object;
+ return [[[self alloc] initWithMCAddress:address] autorelease];
+}
+
+ (MCOAddress *) addressWithDisplayName:(NSString *)displayName
mailbox:(NSString *)mailbox
{
diff --git a/src/objc/abstract/MCOMessageHeader.mm b/src/objc/abstract/MCOMessageHeader.mm
index 3d0a3d28..ac5e8a81 100644
--- a/src/objc/abstract/MCOMessageHeader.mm
+++ b/src/objc/abstract/MCOMessageHeader.mm
@@ -9,6 +9,8 @@
#import "MCOMessageHeader.h"
#import "MCOMessageHeader+Private.h"
+#include <typeinfo>
+
#include "MCMessageHeader.h"
#include "NSString+MCO.h"
#include "NSArray+MCO.h"
@@ -21,6 +23,17 @@
mailcore::MessageHeader * _nativeHeader;
}
++ (void) initialize
+{
+ MCORegisterClass(self, &typeid(mailcore::MessageHeader));
+}
+
++ (NSObject *) mco_objectWithMCObject:(mailcore::Object *)object
+{
+ mailcore::MessageHeader * header = (mailcore::MessageHeader *) object;
+ return [[[self alloc] initWithMCMessageHeader:header] autorelease];
+}
+
- (id) init
{
self = [super init];
diff --git a/src/objc/imap/MCOIMAP.h b/src/objc/imap/MCOIMAP.h
new file mode 100644
index 00000000..564373ef
--- /dev/null
+++ b/src/objc/imap/MCOIMAP.h
@@ -0,0 +1,11 @@
+//
+// MCOIMAP.h
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 3/22/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import <mailcore/MCOIMAPSession.h>
+#import <mailcore/MCOCheckAccountOperation.h>
+#import <mailcore/MCOFetchFoldersOperation.h>
diff --git a/src/objc/utils/NSArray+MCO.h b/src/objc/utils/NSArray+MCO.h
index 8d95acbc..769da85d 100644
--- a/src/objc/utils/NSArray+MCO.h
+++ b/src/objc/utils/NSArray+MCO.h
@@ -17,6 +17,8 @@ namespace mailcore {
@interface NSArray (MCO)
#ifdef __cplusplus
++ (NSArray *) mco_arrayWithMCArray:(mailcore::Array *)array;
+
- (mailcore::Array *) mco_mcArray;
#endif
diff --git a/src/objc/utils/NSArray+MCO.mm b/src/objc/utils/NSArray+MCO.mm
index 1c4ef3e6..4b9eaab7 100644
--- a/src/objc/utils/NSArray+MCO.mm
+++ b/src/objc/utils/NSArray+MCO.mm
@@ -14,6 +14,15 @@
@implementation NSArray (MCO)
++ (NSArray *) mco_arrayWithMCArray:(mailcore::Array *)array
+{
+ NSMutableArray * result = [NSMutableArray array];
+ for(unsigned int i = 0 ; i < array->count() ; i ++) {
+ [result addObject:[NSObject mco_objectWithMCObject:array->objectAtIndex(i)]];
+ }
+ return result;
+}
+
- (mailcore::Array *) mco_mcArray
{
mailcore::Array * result = mailcore::Array::array();
diff --git a/src/objc/utils/NSDictionary+MCO.h b/src/objc/utils/NSDictionary+MCO.h
index 71812a46..8e78a872 100644
--- a/src/objc/utils/NSDictionary+MCO.h
+++ b/src/objc/utils/NSDictionary+MCO.h
@@ -17,6 +17,8 @@ namespace mailcore {
@interface NSDictionary (MCO)
#ifdef __cplusplus
++ (NSDictionary *) mco_dictionaryWithMCHashMap:(mailcore::HashMap *)hashmap;
+
- (mailcore::HashMap *) mco_mcHashMap;
#endif
diff --git a/src/objc/utils/NSDictionary+MCO.mm b/src/objc/utils/NSDictionary+MCO.mm
index a751f85b..8ba2f7a5 100644
--- a/src/objc/utils/NSDictionary+MCO.mm
+++ b/src/objc/utils/NSDictionary+MCO.mm
@@ -14,6 +14,20 @@
@implementation NSDictionary (MCO)
++ (NSDictionary *) mco_dictionaryWithMCHashMap:(mailcore::HashMap *)hashmap
+{
+ NSMutableDictionary * result = [NSMutableDictionary dictionary];
+ mailcore::Array * keys = hashmap->allKeys();
+ for(unsigned int i = 0 ; i < keys->count() ; i ++) {
+ mailcore::Object * mcKey = keys->objectAtIndex(i);
+ mailcore::Object * mcValue = hashmap->objectForKey(mcKey);
+ id key = [NSObject mco_objectWithMCObject:mcKey];
+ id value = [NSObject mco_objectWithMCObject:mcValue];
+ [result setObject:value forKey:key];
+ }
+ return result;
+}
+
- (mailcore::HashMap *) mco_mcHashMap
{
mailcore::HashMap * result = mailcore::HashMap::hashMap();
diff --git a/src/objc/utils/NSObject+MCO.h b/src/objc/utils/NSObject+MCO.h
index 349bd27a..6cc24884 100644
--- a/src/objc/utils/NSObject+MCO.h
+++ b/src/objc/utils/NSObject+MCO.h
@@ -9,6 +9,10 @@
#import <Foundation/Foundation.h>
#ifdef __cplusplus
+#include <typeinfo>
+#endif
+
+#ifdef __cplusplus
namespace mailcore {
class Object;
}
@@ -17,7 +21,14 @@ namespace mailcore {
@interface NSObject (MCO)
#ifdef __cplusplus
++ (NSObject *) mco_objectWithMCObject:(mailcore::Object *)object;
+
- (mailcore::Object *) mco_mcObject;
#endif
@end
+
+#ifdef __cplusplus
+extern void MCORegisterClass(Class aClass, const std::type_info * info);
+#endif
+
diff --git a/src/objc/utils/NSObject+MCO.mm b/src/objc/utils/NSObject+MCO.mm
index e25db319..52a1bc43 100644
--- a/src/objc/utils/NSObject+MCO.mm
+++ b/src/objc/utils/NSObject+MCO.mm
@@ -8,19 +8,84 @@
#import "NSObject+MCO.h"
+#include <typeinfo>
+
#import "NSData+MCO.h"
#import "NSString+MCO.h"
#import "NSDictionary+MCO.h"
#import "NSArray+MCO.h"
+#import "NSValue+MCO.h"
#include "MCBaseTypes.h"
#include "MCUtils.h"
+static chash * classHash = NULL;
+
+static void init(void)
+{
+ static dispatch_once_t onceToken = 0;
+ dispatch_once(&onceToken, ^{
+ classHash = chash_new(CHASH_DEFAULTSIZE, CHASH_COPYKEY);
+ });
+}
+
+void MCORegisterClass(Class aClass, const std::type_info * info)
+{
+ chashdatum key;
+ chashdatum value;
+ key.data = &info;
+ key.len = sizeof(info);
+ value.data = aClass;
+ value.len = 0;
+ chash_set(classHash, &key, &value, NULL);
+}
+
+static Class classWithTypeInfo(const std::type_info * info)
+{
+ int r;
+ chashdatum key;
+ chashdatum value;
+ key.data = &info;
+ key.len = sizeof(info);
+ r = chash_get(classHash, &key, &value);
+ if (r < 0)
+ return nil;
+
+ return (Class) value.data;
+}
+
@implementation NSObject (MCO)
++ (NSObject *) mco_objectWithMCObject:(mailcore::Object *)object
+{
+ if (&typeid(object) == &typeid(mailcore::Value *)) {
+ return [NSValue mco_valueWithMCValue:(mailcore::Value *) object];
+ }
+ else if (&typeid(object) == &typeid(mailcore::Data *)) {
+ return [NSData mco_dataWithMCData:(mailcore::Data *) object];
+ }
+ else if (&typeid(object) == &typeid(mailcore::String *)) {
+ return [NSString mco_stringWithMCString:(mailcore::String *) object];
+ }
+ else if (&typeid(object) == &typeid(mailcore::HashMap *)) {
+ return [NSDictionary mco_dictionaryWithMCHashMap:(mailcore::HashMap *) object];
+ }
+ else if (&typeid(object) == &typeid(mailcore::Array *)) {
+ return [NSArray mco_arrayWithMCArray:(mailcore::Array *) object];
+ }
+ else {
+ Class aClass = classWithTypeInfo(&typeid(* object));
+ MCAssert(aClass != nil);
+ return (NSObject *) [aClass mco_objectWithMCObject:object];
+ }
+}
+
- (mailcore::Object *) mco_mcObject
{
- if ([self isKindOfClass:[NSData class]]) {
+ if ([self isKindOfClass:[NSValue class]]) {
+ return [(NSValue *) self mco_mcValue];
+ }
+ else if ([self isKindOfClass:[NSData class]]) {
return [(NSData *) self mco_mcData];
}
else if ([self isKindOfClass:[NSString class]]) {
@@ -33,8 +98,10 @@
return [(NSDictionary *) self mco_mcHashMap];
}
else {
- MCAssert(0);
- return nil;
+ if (![self respondsToSelector:@selector(mco_mcObject)]) {
+ MCAssert(0);
+ }
+ return [self mco_mcObject];
}
}
diff --git a/src/objc/utils/NSValue+MCO.h b/src/objc/utils/NSValue+MCO.h
new file mode 100644
index 00000000..bee3c742
--- /dev/null
+++ b/src/objc/utils/NSValue+MCO.h
@@ -0,0 +1,25 @@
+//
+// NSNumber+MCO.h
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 3/21/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#ifdef __cplusplus
+namespace mailcore {
+ class Value;
+}
+#endif
+
+@interface NSValue (MCO)
+
+#ifdef __cplusplus
++ (NSValue *) mco_valueWithMCValue:(mailcore::Value *)value;
+
+- (mailcore::Value *) mco_mcValue;
+#endif
+
+@end
diff --git a/src/objc/utils/NSValue+MCO.mm b/src/objc/utils/NSValue+MCO.mm
new file mode 100644
index 00000000..81bcebd7
--- /dev/null
+++ b/src/objc/utils/NSValue+MCO.mm
@@ -0,0 +1,100 @@
+//
+// NSNumber+MCO.m
+// mailcore2
+//
+// Created by DINH Viêt Hoà on 3/21/13.
+// Copyright (c) 2013 MailCore. All rights reserved.
+//
+
+#import "NSValue+MCO.h"
+
+#include "MCAssert.h"
+#include "MCValue.h"
+#include "MCValuePrivate.h"
+
+@implementation NSValue (MCO)
+
++ (NSNumber *) mco_valueWithMCValue:(mailcore::Value *)value
+{
+ switch (value->type()) {
+ case VALUE_TYPE_BOOL_VALUE:
+ return [NSNumber numberWithBool:value->boolValue()];
+ case VALUE_TYPE_CHAR_VALUE:
+ return [NSNumber numberWithChar:value->charValue()];
+ case VALUE_TYPE_UNSIGNED_CHAR_VALUE:
+ return [NSNumber numberWithUnsignedChar:value->unsignedCharValue()];
+ case VALUE_TYPE_SHORT_VALUE:
+ return [NSNumber numberWithShort:value->shortValue()];
+ case VALUE_TYPE_UNSIGNED_SHORT_VALUE:
+ return [NSNumber numberWithUnsignedChar:value->unsignedShortValue()];
+ case VALUE_TYPE_INT_VALUE:
+ return [NSNumber numberWithInt:value->intValue()];
+ case VALUE_TYPE_UNSIGNED_INT_VALUE:
+ return [NSNumber numberWithUnsignedInt:value->unsignedIntValue()];
+ case VALUE_TYPE_LONG_VALUE:
+ return [NSNumber numberWithLong:value->longValue()];
+ case VALUE_TYPE_UNSIGNED_LONG_VALUE:
+ return [NSNumber numberWithUnsignedLong:value->unsignedLongValue()];
+ case VALUE_TYPE_LONG_LONG_VALUE:
+ return [NSNumber numberWithLongLong:value->longLongValue()];
+ case VALUE_TYPE_UNSIGNED_LONG_LONG_VALUE:
+ return [NSNumber numberWithUnsignedLongLong:value->unsignedLongLongValue()];
+ case VALUE_TYPE_FLOAT_VALUE:
+ return [NSNumber numberWithFloat:value->floatValue()];
+ case VALUE_TYPE_DOUBLE_VALUE:
+ return [NSNumber numberWithDouble:value->doubleValue()];
+ case VALUE_TYPE_POINTER_VALUE:
+ MCAssert(0);
+ return nil;
+ case VALUE_TYPE_DATA_VALUE:
+ MCAssert(0);
+ return nil;
+ default:
+ MCAssert(0);
+ return nil;
+ }
+}
+
+- (mailcore::Value *) mco_mcValue;
+{
+ NSNumber * nb = (NSNumber *) self;
+ if (strcmp([self objCType], @encode(BOOL)) == 0) {
+ return mailcore::Value::valueWithBoolValue([nb boolValue]);
+ }
+ else if (strcmp([self objCType], @encode(char)) == 0) {
+ return mailcore::Value::valueWithCharValue([nb charValue]);
+ }
+ else if (strcmp([self objCType], @encode(unsigned char)) == 0) {
+ return mailcore::Value::valueWithUnsignedCharValue([nb unsignedCharValue]);
+ }
+ else if (strcmp([self objCType], @encode(int)) == 0) {
+ return mailcore::Value::valueWithIntValue([nb intValue]);
+ }
+ else if (strcmp([self objCType], @encode(unsigned int)) == 0) {
+ return mailcore::Value::valueWithUnsignedIntValue([nb unsignedIntValue]);
+ }
+ else if (strcmp([self objCType], @encode(long)) == 0) {
+ return mailcore::Value::valueWithLongValue([nb longValue]);
+ }
+ else if (strcmp([self objCType], @encode(unsigned long)) == 0) {
+ return mailcore::Value::valueWithUnsignedLongValue([nb unsignedLongValue]);
+ }
+ else if (strcmp([self objCType], @encode(long long)) == 0) {
+ return mailcore::Value::valueWithLongLongValue([nb longLongValue]);
+ }
+ else if (strcmp([self objCType], @encode(unsigned long long)) == 0) {
+ return mailcore::Value::valueWithUnsignedLongLongValue([nb unsignedLongLongValue]);
+ }
+ else if (strcmp([self objCType], @encode(float)) == 0) {
+ return mailcore::Value::valueWithFloatValue([nb floatValue]);
+ }
+ else if (strcmp([self objCType], @encode(double)) == 0) {
+ return mailcore::Value::valueWithDoubleValue([nb doubleValue]);
+ }
+ else {
+ MCAssert(0);
+ return NULL;
+ }
+}
+
+@end