From 843dc8ae14294c23878f302415b020cf46062108 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Thu, 17 Nov 2022 15:09:53 -0800 Subject: [PATCH] pkg/macos: support CFCharacterSet --- pkg/macos/foundation.zig | 1 + pkg/macos/foundation/character_set.zig | 30 ++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 pkg/macos/foundation/character_set.zig diff --git a/pkg/macos/foundation.zig b/pkg/macos/foundation.zig index 3471c1757..f42fbb3bc 100644 --- a/pkg/macos/foundation.zig +++ b/pkg/macos/foundation.zig @@ -2,6 +2,7 @@ pub const c = @import("foundation/c.zig"); pub usingnamespace @import("foundation/array.zig"); pub usingnamespace @import("foundation/attributed_string.zig"); pub usingnamespace @import("foundation/base.zig"); +pub usingnamespace @import("foundation/character_set.zig"); pub usingnamespace @import("foundation/data.zig"); pub usingnamespace @import("foundation/dictionary.zig"); pub usingnamespace @import("foundation/number.zig"); diff --git a/pkg/macos/foundation/character_set.zig b/pkg/macos/foundation/character_set.zig new file mode 100644 index 000000000..60d1843a9 --- /dev/null +++ b/pkg/macos/foundation/character_set.zig @@ -0,0 +1,30 @@ +const std = @import("std"); +const assert = std.debug.assert; +const Allocator = std.mem.Allocator; +const foundation = @import("../foundation.zig"); +const c = @import("c.zig"); + +pub const CharacterSet = opaque { + pub fn createWithCharactersInString( + str: *foundation.String, + ) Allocator.Error!*CharacterSet { + return @intToPtr(?*CharacterSet, @ptrToInt(c.CFCharacterSetCreateWithCharactersInString( + null, + @ptrCast(c.CFStringRef, str), + ))) orelse Allocator.Error.OutOfMemory; + } + + pub fn release(self: *CharacterSet) void { + c.CFRelease(self); + } +}; + +test "character set" { + //const testing = std.testing; + + const str = try foundation.String.createWithBytes("hello world", .ascii, false); + defer str.release(); + + const cs = try CharacterSet.createWithCharactersInString(str); + defer cs.release(); +}