A game framework written with osu! in mind.
at master 47 lines 1.9 kB view raw
1// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence. 2// See the LICENCE file in the repository root for full licence text. 3 4using System; 5 6namespace osu.Framework.Platform.MacOS.Native 7{ 8 internal readonly struct NSArray 9 { 10 internal IntPtr Handle { get; } 11 12 private static readonly IntPtr class_pointer = Class.Get("NSArray"); 13 private static readonly IntPtr mutable_class_pointer = Class.Get("NSMutableArray"); 14 private static readonly IntPtr sel_array_with_object = Selector.Get("arrayWithObject:"); 15 private static readonly IntPtr sel_array = Selector.Get("array"); 16 private static readonly IntPtr sel_add_object = Selector.Get("addObject:"); 17 private static readonly IntPtr sel_count = Selector.Get("count"); 18 private static readonly IntPtr sel_object_at_index = Selector.Get("objectAtIndex:"); 19 20 internal NSArray(IntPtr handle) 21 { 22 Handle = handle; 23 } 24 25 internal static NSArray ArrayWithObject(IntPtr obj) => new NSArray(Cocoa.SendIntPtr(class_pointer, sel_array_with_object, obj)); 26 27 internal static NSArray ArrayWithObjects(IntPtr[] objs) 28 { 29 var mutableArray = Cocoa.SendIntPtr(mutable_class_pointer, sel_array); 30 foreach (IntPtr obj in objs) 31 Cocoa.SendVoid(mutableArray, sel_add_object, obj); 32 return new NSArray(mutableArray); 33 } 34 35 internal int Count() => Cocoa.SendInt(Handle, sel_count); 36 37 internal IntPtr ObjectAtIndex(int index) => Cocoa.SendIntPtr(Handle, sel_object_at_index, index); 38 39 internal IntPtr[] ToArray() 40 { 41 IntPtr[] result = new IntPtr[Count()]; 42 for (int i = 0; i < result.Length; i++) 43 result[i] = ObjectAtIndex(i); 44 return result; 45 } 46 } 47}