From d0e269df6a5d7330e208761cd52f6aafb29a40f4 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sat, 8 Oct 2022 10:20:48 -0700 Subject: [PATCH] macos: data --- pkg/macos/foundation.zig | 1 + pkg/macos/foundation/data.zig | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 pkg/macos/foundation/data.zig diff --git a/pkg/macos/foundation.zig b/pkg/macos/foundation.zig index 8b29ccfb3..309da9675 100644 --- a/pkg/macos/foundation.zig +++ b/pkg/macos/foundation.zig @@ -1,6 +1,7 @@ pub const c = @import("foundation/c.zig"); pub usingnamespace @import("foundation/array.zig"); pub usingnamespace @import("foundation/base.zig"); +pub usingnamespace @import("foundation/data.zig"); pub usingnamespace @import("foundation/dictionary.zig"); pub usingnamespace @import("foundation/number.zig"); pub usingnamespace @import("foundation/string.zig"); diff --git a/pkg/macos/foundation/data.zig b/pkg/macos/foundation/data.zig new file mode 100644 index 000000000..eafb93595 --- /dev/null +++ b/pkg/macos/foundation/data.zig @@ -0,0 +1,30 @@ +const std = @import("std"); +const Allocator = std.mem.Allocator; +const foundation = @import("../foundation.zig"); +const c = @import("c.zig"); + +pub const Data = opaque { + pub fn createWithBytesNoCopy(data: []const u8) Allocator.Error!*Data { + return @intToPtr( + ?*Data, + @ptrToInt(c.CFDataCreateWithBytesNoCopy( + null, + data.ptr, + @intCast(c_long, data.len), + c.kCFAllocatorNull, + )), + ) orelse error.OutOfMemory; + } + + pub fn release(self: *Data) void { + foundation.CFRelease(self); + } +}; + +test { + //const testing = std.testing; + + var raw = "hello world"; + const data = try Data.createWithBytesNoCopy(raw); + defer data.release(); +}