Skip to content
This repository has been archived by the owner on Dec 5, 2019. It is now read-only.

Commit

Permalink
Implemented <OHBridged> for NSArray
Browse files Browse the repository at this point in the history
  • Loading branch information
jspahrsummers committed Aug 9, 2012
1 parent 03e74af commit bb9e0f4
Show file tree
Hide file tree
Showing 6 changed files with 57 additions and 0 deletions.
8 changes: 8 additions & 0 deletions ObjectiveHaskell.xcodeproj/project.pbxproj
Expand Up @@ -40,6 +40,8 @@
D0F3A2FE15D359650032B8D9 /* NSString+OHExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = D0F3A2FC15D359650032B8D9 /* NSString+OHExtensions.m */; };
D0F3A30115D360B50032B8D9 /* NSNumber+OHExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = D0F3A2FF15D360B50032B8D9 /* NSNumber+OHExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; };
D0F3A30215D360B50032B8D9 /* NSNumber+OHExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = D0F3A30015D360B50032B8D9 /* NSNumber+OHExtensions.m */; };
D0F3A31715D366730032B8D9 /* NSArray+OHExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = D0F3A31515D366730032B8D9 /* NSArray+OHExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; };
D0F3A31815D366730032B8D9 /* NSArray+OHExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = D0F3A31615D366730032B8D9 /* NSArray+OHExtensions.m */; };
/* End PBXBuildFile section */

/* Begin PBXBuildRule section */
Expand Down Expand Up @@ -163,6 +165,8 @@
D0F3A2FC15D359650032B8D9 /* NSString+OHExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+OHExtensions.m"; sourceTree = "<group>"; };
D0F3A2FF15D360B50032B8D9 /* NSNumber+OHExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSNumber+OHExtensions.h"; sourceTree = "<group>"; };
D0F3A30015D360B50032B8D9 /* NSNumber+OHExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSNumber+OHExtensions.m"; sourceTree = "<group>"; };
D0F3A31515D366730032B8D9 /* NSArray+OHExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+OHExtensions.h"; sourceTree = "<group>"; };
D0F3A31615D366730032B8D9 /* NSArray+OHExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+OHExtensions.m"; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand Down Expand Up @@ -191,6 +195,8 @@
D08A8AE415CBBC3B0084E989 /* Objective-C */ = {
isa = PBXGroup;
children = (
D0F3A31515D366730032B8D9 /* NSArray+OHExtensions.h */,
D0F3A31615D366730032B8D9 /* NSArray+OHExtensions.m */,
D0F3A2FF15D360B50032B8D9 /* NSNumber+OHExtensions.h */,
D0F3A30015D360B50032B8D9 /* NSNumber+OHExtensions.m */,
D090624E15B0E613001CAC43 /* NSObject+OHExtensions.m */,
Expand Down Expand Up @@ -424,6 +430,7 @@
D0F3A2F115D353CB0032B8D9 /* OHBridged.h in Headers */,
D0F3A2FD15D359650032B8D9 /* NSString+OHExtensions.h in Headers */,
D0F3A30115D360B50032B8D9 /* NSNumber+OHExtensions.h in Headers */,
D0F3A31715D366730032B8D9 /* NSArray+OHExtensions.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -568,6 +575,7 @@
D08A8AF415CBC2A90084E989 /* EXTScope.m in Sources */,
D0F3A2FE15D359650032B8D9 /* NSString+OHExtensions.m in Sources */,
D0F3A30215D360B50032B8D9 /* NSNumber+OHExtensions.m in Sources */,
D0F3A31815D366730032B8D9 /* NSArray+OHExtensions.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down
13 changes: 13 additions & 0 deletions ObjectiveHaskell/NSArray+OHExtensions.h
@@ -0,0 +1,13 @@
//
// NSArray+OHExtensions.h
// ObjectiveHaskell
//
// Created by Justin Spahr-Summers on 08.08.12.
// Released into the public domain.
//

#import <Foundation/Foundation.h>
#import "OHBridged.h"

@interface NSArray (OHExtensions) <OHBridged>
@end
22 changes: 22 additions & 0 deletions ObjectiveHaskell/NSArray+OHExtensions.m
@@ -0,0 +1,22 @@
//
// NSArray+OHExtensions.m
// ObjectiveHaskell
//
// Created by Justin Spahr-Summers on 08.08.12.
// Released into the public domain.
//

#import "NSArray+OHExtensions.h"
#import "NSArray_stub.h"

@implementation NSArray (OHExtensions)

+ (instancetype)objectWithHaskellPointer:(OHHaskellPtr)haskellPointer {
return OHNSArrayFromHaskellPtr(haskellPointer);
}

- (OHHaskellPtr)haskellPointer {
return OHHaskellPtrFromNSArray(self);
}

@end
10 changes: 10 additions & 0 deletions ObjectiveHaskell/NSArray.hs
Expand Up @@ -10,6 +10,7 @@ import Control.Monad
import Data.Foldable
import Data.Sequence as Seq
import Foreign.C.Types
import Foreign.StablePtr
import ObjectiveHaskell.MsgSend
import ObjectiveHaskell.ObjC

Expand Down Expand Up @@ -46,3 +47,12 @@ toNSArray s = do
instance Bridged (Seq Id) where
toObjC = toNSArray
fromObjC = fromNSArray

fromNSArrayObjC :: Id -> IO (StablePtr (Seq Id))
fromNSArrayObjC obj = fromNSArray obj >>= newStablePtr

toNSArrayObjC :: StablePtr (Seq Id) -> IO Id
toNSArrayObjC ptr = deRefStablePtr ptr >>= toNSArray

exportFunc "OHHaskellPtrFromNSArray" [t| UnsafeId -> IO (StablePtr (Seq Id)) |] 'fromNSArrayObjC
exportFunc "OHNSArrayFromHaskellPtr" [t| StablePtr (Seq Id) -> IO UnsafeId |] 'toNSArrayObjC
1 change: 1 addition & 0 deletions ObjectiveHaskell/ObjectiveHaskell.h
Expand Up @@ -6,6 +6,7 @@
// Released into the public domain.
//

#import "NSArray+OHExtensions.h"
#import "NSNumber+OHExtensions.h"
#import "NSString+OHExtensions.h"
#import "OHBridged.h"
Expand Down
3 changes: 3 additions & 0 deletions ObjectiveHaskellTests/ObjectiveHaskellTests.m
Expand Up @@ -17,6 +17,9 @@ - (void)testNSArrayBridging {
NSArray *array = addFoobarToArray(@[ @5, @{} ]);
NSArray *expectedArray = @[ @5, @{}, @"foobar" ];
STAssertEqualObjects(array, expectedArray, @"");

NSArray *passthroughArray = [NSArray objectWithHaskellPointer:array.haskellPointer];
STAssertEqualObjects(array, passthroughArray, @"");
}

- (void)testNSDataBridging {
Expand Down

0 comments on commit bb9e0f4

Please sign in to comment.