CPF/CPF.Mac/Mac/Foundation/NSCompoundPredicate.cs

143 lines
4.6 KiB
C#
Raw Normal View History

2023-11-21 23:05:03 +08:00
using CPF.Mac.ObjCRuntime;
using System;
using System.ComponentModel;
namespace CPF.Mac.Foundation
{
[Register("NSCompoundPredicate", true)]
public class NSCompoundPredicate : NSPredicate
{
private static readonly IntPtr selCompoundPredicateTypeHandle = Selector.GetHandle("compoundPredicateType");
private static readonly IntPtr selSubpredicatesHandle = Selector.GetHandle("subpredicates");
private static readonly IntPtr selInitWithTypeSubpredicates_Handle = Selector.GetHandle("initWithType:subpredicates:");
private static readonly IntPtr selAndPredicateWithSubpredicates_Handle = Selector.GetHandle("andPredicateWithSubpredicates:");
private static readonly IntPtr selOrPredicateWithSubpredicates_Handle = Selector.GetHandle("orPredicateWithSubpredicates:");
private static readonly IntPtr selNotPredicateWithSubpredicate_Handle = Selector.GetHandle("notPredicateWithSubpredicate:");
private static readonly IntPtr class_ptr = Class.GetHandle("NSCompoundPredicate");
private object __mt_Subpredicates_var;
public override IntPtr ClassHandle => class_ptr;
public virtual NSCompoundPredicateType Type
{
[Export("compoundPredicateType")]
get
{
if (IsDirectBinding)
{
return (NSCompoundPredicateType)Messaging.UInt64_objc_msgSend(base.Handle, selCompoundPredicateTypeHandle);
}
return (NSCompoundPredicateType)Messaging.UInt64_objc_msgSendSuper(base.SuperHandle, selCompoundPredicateTypeHandle);
}
}
public virtual NSPredicate[] Subpredicates
{
[Export("subpredicates")]
get
{
return (NSPredicate[])(__mt_Subpredicates_var = ((!IsDirectBinding) ? NSArray.ArrayFromHandle<NSPredicate>(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selSubpredicatesHandle)) : NSArray.ArrayFromHandle<NSPredicate>(Messaging.IntPtr_objc_msgSend(base.Handle, selSubpredicatesHandle))));
}
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
[Export("initWithCoder:")]
public NSCompoundPredicate(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 NSCompoundPredicate(NSObjectFlag t)
: base(t)
{
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
public NSCompoundPredicate(IntPtr handle)
: base(handle)
{
}
[Export("initWithType:subpredicates:")]
public NSCompoundPredicate(NSCompoundPredicateType type, NSPredicate[] subpredicates)
: base(NSObjectFlag.Empty)
{
if (subpredicates == null)
{
throw new ArgumentNullException("subpredicates");
}
NSArray nSArray = NSArray.FromNSObjects(subpredicates);
if (IsDirectBinding)
{
base.Handle = Messaging.IntPtr_objc_msgSend_UInt64_IntPtr(base.Handle, selInitWithTypeSubpredicates_Handle, (ulong)type, nSArray.Handle);
}
else
{
base.Handle = Messaging.IntPtr_objc_msgSendSuper_UInt64_IntPtr(base.SuperHandle, selInitWithTypeSubpredicates_Handle, (ulong)type, nSArray.Handle);
}
nSArray.Dispose();
}
[Export("andPredicateWithSubpredicates:")]
public static NSPredicate CreateAndPredicate(NSPredicate[] subpredicates)
{
if (subpredicates == null)
{
throw new ArgumentNullException("subpredicates");
}
NSArray nSArray = NSArray.FromNSObjects(subpredicates);
NSPredicate result = (NSPredicate)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr(class_ptr, selAndPredicateWithSubpredicates_Handle, nSArray.Handle));
nSArray.Dispose();
return result;
}
[Export("orPredicateWithSubpredicates:")]
public static NSPredicate CreateOrPredicate(NSPredicate[] subpredicates)
{
if (subpredicates == null)
{
throw new ArgumentNullException("subpredicates");
}
NSArray nSArray = NSArray.FromNSObjects(subpredicates);
NSPredicate result = (NSPredicate)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr(class_ptr, selOrPredicateWithSubpredicates_Handle, nSArray.Handle));
nSArray.Dispose();
return result;
}
[Export("notPredicateWithSubpredicate:")]
public static NSPredicate CreateNotPredicate(NSPredicate predicate)
{
if (predicate == null)
{
throw new ArgumentNullException("predicate");
}
return (NSPredicate)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr(class_ptr, selNotPredicateWithSubpredicate_Handle, predicate.Handle));
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (base.Handle == IntPtr.Zero)
{
__mt_Subpredicates_var = null;
}
}
}
}