diff options
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 |