CPF/CPF.Mac/Mac/Foundation/NSIndexPath.cs
2023-11-21 23:05:03 +08:00

237 lines
6.6 KiB
C#

using CPF.Mac.ObjCRuntime;
using System;
using System.ComponentModel;
using System.Runtime.InteropServices;
namespace CPF.Mac.Foundation
{
[Register("NSIndexPath", true)]
public class NSIndexPath : NSObject
{
private static readonly IntPtr selLengthHandle = Selector.GetHandle("length");
private static readonly IntPtr selIndexPathWithIndex_Handle = Selector.GetHandle("indexPathWithIndex:");
private static readonly IntPtr selIndexPathWithIndexesLength_Handle = Selector.GetHandle("indexPathWithIndexes:length:");
private static readonly IntPtr selIndexPathByAddingIndex_Handle = Selector.GetHandle("indexPathByAddingIndex:");
private static readonly IntPtr selIndexPathByRemovingLastIndexHandle = Selector.GetHandle("indexPathByRemovingLastIndex");
private static readonly IntPtr selIndexAtPosition_Handle = Selector.GetHandle("indexAtPosition:");
private static readonly IntPtr selGetIndexes_Handle = Selector.GetHandle("getIndexes:");
private static readonly IntPtr selCompare_Handle = Selector.GetHandle("compare:");
private static readonly IntPtr class_ptr = Class.GetHandle("NSIndexPath");
public override IntPtr ClassHandle => class_ptr;
public virtual ulong Length
{
[Export("length")]
get
{
if (IsDirectBinding)
{
return Messaging.UInt64_objc_msgSend(base.Handle, selLengthHandle);
}
return Messaging.UInt64_objc_msgSendSuper(base.SuperHandle, selLengthHandle);
}
}
[Advice("Use NSIndexPath.Create (int[]) instead")]
public NSIndexPath FromIndexes(uint[] indexes)
{
if (indexes == null)
{
throw new ArgumentNullException("indexes");
}
IntPtr intPtr = Marshal.AllocHGlobal(4 * indexes.Length);
for (int i = 0; i < indexes.Length; i++)
{
Marshal.WriteInt32(intPtr, i * 4, (int)indexes[i]);
}
NSIndexPath result = _FromIndex(intPtr, (ulong)indexes.Length);
Marshal.FreeHGlobal(intPtr);
return result;
}
public static NSIndexPath Create(params int[] indexes)
{
if (indexes == null)
{
throw new ArgumentNullException("indexes");
}
IntPtr intPtr = Marshal.AllocHGlobal(4 * indexes.Length);
for (int i = 0; i < indexes.Length; i++)
{
Marshal.WriteInt32(intPtr, i * 4, indexes[i]);
}
NSIndexPath result = _FromIndex(intPtr, (ulong)indexes.Length);
Marshal.FreeHGlobal(intPtr);
return result;
}
public static NSIndexPath Create(params uint[] indexes)
{
if (indexes == null)
{
throw new ArgumentNullException("indexes");
}
IntPtr intPtr = Marshal.AllocHGlobal(4 * indexes.Length);
for (int i = 0; i < indexes.Length; i++)
{
Marshal.WriteInt32(intPtr, i * 4, (int)indexes[i]);
}
NSIndexPath result = _FromIndex(intPtr, (ulong)indexes.Length);
Marshal.FreeHGlobal(intPtr);
return result;
}
public uint[] GetIndexes()
{
int num = (int)Length;
IntPtr intPtr = Marshal.AllocHGlobal(4 * num);
uint[] array = new uint[num];
for (int i = 0; i < num; i++)
{
array[i] = (uint)Marshal.ReadInt32(intPtr, i * 4);
}
Marshal.FreeHGlobal(intPtr);
return array;
}
public override bool Equals(object obj)
{
if (obj == null)
{
return false;
}
NSIndexPath nSIndexPath = obj as NSIndexPath;
if (nSIndexPath == null)
{
return false;
}
return Compare(nSIndexPath) == 0;
}
public override int GetHashCode()
{
return (int)Length;
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
[Export("init")]
public NSIndexPath()
: base(NSObjectFlag.Empty)
{
if (IsDirectBinding)
{
base.Handle = Messaging.IntPtr_objc_msgSend(base.Handle, Selector.Init);
}
else
{
base.Handle = Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, Selector.Init);
}
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
[Export("initWithCoder:")]
public NSIndexPath(NSCoder coder)
: base(NSObjectFlag.Empty)
{
if (IsDirectBinding)
{
base.Handle = Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, Selector.InitWithCoder, coder.Handle);
}
else
{
base.Handle = Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, Selector.InitWithCoder, coder.Handle);
}
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
public NSIndexPath(NSObjectFlag t)
: base(t)
{
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
public NSIndexPath(IntPtr handle)
: base(handle)
{
}
[Export("indexPathWithIndex:")]
public static NSIndexPath FromIndex(ulong index)
{
return (NSIndexPath)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_UInt64(class_ptr, selIndexPathWithIndex_Handle, index));
}
[Export("indexPathWithIndexes:length:")]
internal static NSIndexPath _FromIndex(IntPtr indexes, ulong len)
{
return (NSIndexPath)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr_UInt64(class_ptr, selIndexPathWithIndexesLength_Handle, indexes, len));
}
[Export("indexPathByAddingIndex:")]
public virtual NSIndexPath IndexPathByAddingIndex(ulong index)
{
if (IsDirectBinding)
{
return (NSIndexPath)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_UInt64(base.Handle, selIndexPathByAddingIndex_Handle, index));
}
return (NSIndexPath)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper_UInt64(base.SuperHandle, selIndexPathByAddingIndex_Handle, index));
}
[Export("indexPathByRemovingLastIndex")]
public virtual NSIndexPath IndexPathByRemovingLastIndex()
{
if (IsDirectBinding)
{
return (NSIndexPath)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selIndexPathByRemovingLastIndexHandle));
}
return (NSIndexPath)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selIndexPathByRemovingLastIndexHandle));
}
[Export("indexAtPosition:")]
public virtual ulong IndexAtPosition(ulong position)
{
if (IsDirectBinding)
{
return Messaging.UInt64_objc_msgSend_UInt64(base.Handle, selIndexAtPosition_Handle, position);
}
return Messaging.UInt64_objc_msgSendSuper_UInt64(base.SuperHandle, selIndexAtPosition_Handle, position);
}
[Export("getIndexes:")]
internal virtual void _GetIndexes(IntPtr target)
{
if (IsDirectBinding)
{
Messaging.void_objc_msgSend_IntPtr(base.Handle, selGetIndexes_Handle, target);
}
else
{
Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selGetIndexes_Handle, target);
}
}
[Export("compare:")]
public virtual long Compare(NSIndexPath other)
{
if (other == null)
{
throw new ArgumentNullException("other");
}
if (IsDirectBinding)
{
return Messaging.Int64_objc_msgSend_IntPtr(base.Handle, selCompare_Handle, other.Handle);
}
return Messaging.Int64_objc_msgSendSuper_IntPtr(base.SuperHandle, selCompare_Handle, other.Handle);
}
}
}