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 NSData
Browse files Browse the repository at this point in the history
  • Loading branch information
jspahrsummers committed Aug 9, 2012
1 parent f132257 commit 2da504e
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 @@ -44,6 +44,8 @@
D0F3A31815D366730032B8D9 /* NSArray+OHExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = D0F3A31615D366730032B8D9 /* NSArray+OHExtensions.m */; };
D0F3A31B15D36F5D0032B8D9 /* NSDictionary+OHExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = D0F3A31915D36F5D0032B8D9 /* NSDictionary+OHExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; };
D0F3A31C15D36F5D0032B8D9 /* NSDictionary+OHExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = D0F3A31A15D36F5D0032B8D9 /* NSDictionary+OHExtensions.m */; };
D0F3A31F15D3717C0032B8D9 /* NSData+OHExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = D0F3A31D15D3717C0032B8D9 /* NSData+OHExtensions.h */; };
D0F3A32015D3717C0032B8D9 /* NSData+OHExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = D0F3A31E15D3717C0032B8D9 /* NSData+OHExtensions.m */; };
/* End PBXBuildFile section */

/* Begin PBXBuildRule section */
Expand Down Expand Up @@ -171,6 +173,8 @@
D0F3A31615D366730032B8D9 /* NSArray+OHExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+OHExtensions.m"; sourceTree = "<group>"; };
D0F3A31915D36F5D0032B8D9 /* NSDictionary+OHExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+OHExtensions.h"; sourceTree = "<group>"; };
D0F3A31A15D36F5D0032B8D9 /* NSDictionary+OHExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+OHExtensions.m"; sourceTree = "<group>"; };
D0F3A31D15D3717C0032B8D9 /* NSData+OHExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSData+OHExtensions.h"; sourceTree = "<group>"; };
D0F3A31E15D3717C0032B8D9 /* NSData+OHExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSData+OHExtensions.m"; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand Down Expand Up @@ -201,6 +205,8 @@
children = (
D0F3A31515D366730032B8D9 /* NSArray+OHExtensions.h */,
D0F3A31615D366730032B8D9 /* NSArray+OHExtensions.m */,
D0F3A31D15D3717C0032B8D9 /* NSData+OHExtensions.h */,
D0F3A31E15D3717C0032B8D9 /* NSData+OHExtensions.m */,
D0F3A31915D36F5D0032B8D9 /* NSDictionary+OHExtensions.h */,
D0F3A31A15D36F5D0032B8D9 /* NSDictionary+OHExtensions.m */,
D0F3A2FF15D360B50032B8D9 /* NSNumber+OHExtensions.h */,
Expand Down Expand Up @@ -438,6 +444,7 @@
D0F3A30115D360B50032B8D9 /* NSNumber+OHExtensions.h in Headers */,
D0F3A31715D366730032B8D9 /* NSArray+OHExtensions.h in Headers */,
D0F3A31B15D36F5D0032B8D9 /* NSDictionary+OHExtensions.h in Headers */,
D0F3A31F15D3717C0032B8D9 /* NSData+OHExtensions.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down Expand Up @@ -584,6 +591,7 @@
D0F3A30215D360B50032B8D9 /* NSNumber+OHExtensions.m in Sources */,
D0F3A31815D366730032B8D9 /* NSArray+OHExtensions.m in Sources */,
D0F3A31C15D36F5D0032B8D9 /* NSDictionary+OHExtensions.m in Sources */,
D0F3A32015D3717C0032B8D9 /* NSData+OHExtensions.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down
13 changes: 13 additions & 0 deletions ObjectiveHaskell/NSData+OHExtensions.h
@@ -0,0 +1,13 @@
//
// NSData+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 NSData (OHExtensions) <OHBridged>
@end
22 changes: 22 additions & 0 deletions ObjectiveHaskell/NSData+OHExtensions.m
@@ -0,0 +1,22 @@
//
// NSData+OHExtensions.m
// ObjectiveHaskell
//
// Created by Justin Spahr-Summers on 08.08.12.
// Released into the public domain.
//

#import "NSData+OHExtensions.h"
#import "NSData_stub.h"

@implementation NSData (OHExtensions)

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

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

@end
10 changes: 10 additions & 0 deletions ObjectiveHaskell/NSData.hs
Expand Up @@ -11,6 +11,7 @@ import Data.Word
import Foreign.C.Types
import Foreign.Marshal.Array
import Foreign.Ptr
import Foreign.StablePtr
import ObjectiveHaskell.MsgSend
import ObjectiveHaskell.ObjC

Expand Down Expand Up @@ -38,3 +39,12 @@ toNSData str =
instance Bridged ByteString where
toObjC = toNSData
fromObjC = fromNSData

fromNSDataObjC :: Id -> IO (StablePtr ByteString)
fromNSDataObjC obj = fromNSData obj >>= newStablePtr

toNSDataObjC :: StablePtr ByteString -> IO Id
toNSDataObjC ptr = deRefStablePtr ptr >>= toNSData

exportFunc "OHHaskellPtrFromNSData" [t| UnsafeId -> IO (StablePtr ByteString) |] 'fromNSDataObjC
exportFunc "OHNSDataFromHaskellPtr" [t| StablePtr ByteString -> IO UnsafeId |] 'toNSDataObjC
1 change: 1 addition & 0 deletions ObjectiveHaskell/ObjectiveHaskell.h
Expand Up @@ -7,6 +7,7 @@
//

#import "NSArray+OHExtensions.h"
#import "NSData+OHExtensions.h"
#import "NSDictionary+OHExtensions.h"
#import "NSNumber+OHExtensions.h"
#import "NSString+OHExtensions.h"
Expand Down
3 changes: 3 additions & 0 deletions ObjectiveHaskellTests/ObjectiveHaskellTests.m
Expand Up @@ -29,6 +29,9 @@ - (void)testNSDataBridging {
unsigned char expectedBytes[] = { 1, 2, 3, 5 };
STAssertEquals([data length], sizeof(expectedBytes), @"");
STAssertTrue(memcmp([data bytes], expectedBytes, sizeof(expectedBytes)) == 0, @"");

NSData *passthroughData = [NSData objectWithHaskellPointer:data.haskellPointer];
STAssertEqualObjects(data, passthroughData, @"");
}

- (void)testNSDictionaryBridging {
Expand Down

0 comments on commit 2da504e

Please sign in to comment.