mirror of
https://gitee.com/csharpui/CPF.git
synced 2025-12-21 11:00:02 +08:00
初始化
This commit is contained in:
496
CPF.Mac/Mac/Foundation/NSCoder.cs
Normal file
496
CPF.Mac/Mac/Foundation/NSCoder.cs
Normal file
@@ -0,0 +1,496 @@
|
||||
using CPF.Mac.ObjCRuntime;
|
||||
using System;
|
||||
using System.ComponentModel;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace CPF.Mac.Foundation
|
||||
{
|
||||
[Register("NSCoder", true)]
|
||||
public class NSCoder : NSObject
|
||||
{
|
||||
private static readonly IntPtr selAllowedClassesHandle = Selector.GetHandle("allowedClasses");
|
||||
|
||||
private static readonly IntPtr selEncodeObject_Handle = Selector.GetHandle("encodeObject:");
|
||||
|
||||
private static readonly IntPtr selEncodeRootObject_Handle = Selector.GetHandle("encodeRootObject:");
|
||||
|
||||
private static readonly IntPtr selDecodeObjectHandle = Selector.GetHandle("decodeObject");
|
||||
|
||||
private static readonly IntPtr selEncodeConditionalObjectForKey_Handle = Selector.GetHandle("encodeConditionalObject:forKey:");
|
||||
|
||||
private static readonly IntPtr selEncodeObjectForKey_Handle = Selector.GetHandle("encodeObject:forKey:");
|
||||
|
||||
private static readonly IntPtr selEncodeBoolForKey_Handle = Selector.GetHandle("encodeBool:forKey:");
|
||||
|
||||
private static readonly IntPtr selEncodeDoubleForKey_Handle = Selector.GetHandle("encodeDouble:forKey:");
|
||||
|
||||
private static readonly IntPtr selEncodeFloatForKey_Handle = Selector.GetHandle("encodeFloat:forKey:");
|
||||
|
||||
private static readonly IntPtr selEncodeInt32ForKey_Handle = Selector.GetHandle("encodeInt32:forKey:");
|
||||
|
||||
private static readonly IntPtr selEncodeInt64ForKey_Handle = Selector.GetHandle("encodeInt64:forKey:");
|
||||
|
||||
private static readonly IntPtr selEncodeBytesLengthForKey_Handle = Selector.GetHandle("encodeBytes:length:forKey:");
|
||||
|
||||
private static readonly IntPtr selContainsValueForKey_Handle = Selector.GetHandle("containsValueForKey:");
|
||||
|
||||
private static readonly IntPtr selDecodeBoolForKey_Handle = Selector.GetHandle("decodeBoolForKey:");
|
||||
|
||||
private static readonly IntPtr selDecodeDoubleForKey_Handle = Selector.GetHandle("decodeDoubleForKey:");
|
||||
|
||||
private static readonly IntPtr selDecodeFloatForKey_Handle = Selector.GetHandle("decodeFloatForKey:");
|
||||
|
||||
private static readonly IntPtr selDecodeInt32ForKey_Handle = Selector.GetHandle("decodeInt32ForKey:");
|
||||
|
||||
private static readonly IntPtr selDecodeInt64ForKey_Handle = Selector.GetHandle("decodeInt64ForKey:");
|
||||
|
||||
private static readonly IntPtr selDecodeObjectForKey_Handle = Selector.GetHandle("decodeObjectForKey:");
|
||||
|
||||
private static readonly IntPtr selDecodeBytesForKeyReturnedLength_Handle = Selector.GetHandle("decodeBytesForKey:returnedLength:");
|
||||
|
||||
private static readonly IntPtr selRequiresSecureCodingHandle = Selector.GetHandle("requiresSecureCoding");
|
||||
|
||||
private static readonly IntPtr class_ptr = Class.GetHandle("NSCoder");
|
||||
|
||||
private object __mt_AllowedClasses_var;
|
||||
|
||||
public override IntPtr ClassHandle => class_ptr;
|
||||
|
||||
[Since(6, 0)]
|
||||
public virtual NSSet AllowedClasses
|
||||
{
|
||||
[Export("allowedClasses")]
|
||||
get
|
||||
{
|
||||
return (NSSet)(__mt_AllowedClasses_var = ((!IsDirectBinding) ? ((NSSet)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selAllowedClassesHandle))) : ((NSSet)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selAllowedClassesHandle)))));
|
||||
}
|
||||
}
|
||||
|
||||
public unsafe void Encode(byte[] buffer, string key)
|
||||
{
|
||||
if (buffer == null)
|
||||
{
|
||||
throw new ArgumentNullException("buffer");
|
||||
}
|
||||
if (key == null)
|
||||
{
|
||||
throw new ArgumentNullException("key");
|
||||
}
|
||||
fixed (byte* value = &buffer[0])
|
||||
{
|
||||
EncodeBlock((IntPtr)(void*)value, buffer.Length, key);
|
||||
}
|
||||
}
|
||||
|
||||
public unsafe void Encode(byte[] buffer, int offset, int count, string key)
|
||||
{
|
||||
if (buffer == null)
|
||||
{
|
||||
throw new ArgumentNullException("buffer");
|
||||
}
|
||||
if (key == null)
|
||||
{
|
||||
throw new ArgumentNullException("key");
|
||||
}
|
||||
if (offset < 0)
|
||||
{
|
||||
throw new ArgumentException("offset < 0");
|
||||
}
|
||||
if (count < 0)
|
||||
{
|
||||
throw new ArgumentException("count < 0");
|
||||
}
|
||||
if (offset > buffer.Length - count)
|
||||
{
|
||||
throw new ArgumentException("Reading would overrun buffer");
|
||||
}
|
||||
fixed (byte* value = &buffer[0])
|
||||
{
|
||||
EncodeBlock((IntPtr)(void*)value, buffer.Length, key);
|
||||
}
|
||||
}
|
||||
|
||||
public unsafe byte[] DecodeBytes(string key)
|
||||
{
|
||||
int num = 0;
|
||||
int* value = #
|
||||
IntPtr intPtr = DecodeBytes(key, (IntPtr)(void*)value);
|
||||
if (intPtr == IntPtr.Zero)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
byte[] array = new byte[num];
|
||||
Marshal.Copy(intPtr, array, 0, num);
|
||||
return array;
|
||||
}
|
||||
|
||||
[EditorBrowsable(EditorBrowsableState.Advanced)]
|
||||
[Export("init")]
|
||||
public NSCoder()
|
||||
: 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 NSCoder(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 NSCoder(NSObjectFlag t)
|
||||
: base(t)
|
||||
{
|
||||
}
|
||||
|
||||
[EditorBrowsable(EditorBrowsableState.Advanced)]
|
||||
public NSCoder(IntPtr handle)
|
||||
: base(handle)
|
||||
{
|
||||
}
|
||||
|
||||
[Export("encodeObject:")]
|
||||
public virtual void Encode(NSObject obj)
|
||||
{
|
||||
if (obj == null)
|
||||
{
|
||||
throw new ArgumentNullException("obj");
|
||||
}
|
||||
if (IsDirectBinding)
|
||||
{
|
||||
Messaging.void_objc_msgSend_IntPtr(base.Handle, selEncodeObject_Handle, obj.Handle);
|
||||
}
|
||||
else
|
||||
{
|
||||
Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selEncodeObject_Handle, obj.Handle);
|
||||
}
|
||||
}
|
||||
|
||||
[Export("encodeRootObject:")]
|
||||
public virtual void EncodeRoot(NSObject obj)
|
||||
{
|
||||
if (obj == null)
|
||||
{
|
||||
throw new ArgumentNullException("obj");
|
||||
}
|
||||
if (IsDirectBinding)
|
||||
{
|
||||
Messaging.void_objc_msgSend_IntPtr(base.Handle, selEncodeRootObject_Handle, obj.Handle);
|
||||
}
|
||||
else
|
||||
{
|
||||
Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selEncodeRootObject_Handle, obj.Handle);
|
||||
}
|
||||
}
|
||||
|
||||
[Export("decodeObject")]
|
||||
public virtual NSObject DecodeObject()
|
||||
{
|
||||
if (IsDirectBinding)
|
||||
{
|
||||
return Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selDecodeObjectHandle));
|
||||
}
|
||||
return Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selDecodeObjectHandle));
|
||||
}
|
||||
|
||||
[Export("encodeConditionalObject:forKey:")]
|
||||
public virtual void EncodeConditionalObject(NSObject val, string key)
|
||||
{
|
||||
if (val == null)
|
||||
{
|
||||
throw new ArgumentNullException("val");
|
||||
}
|
||||
if (key == null)
|
||||
{
|
||||
throw new ArgumentNullException("key");
|
||||
}
|
||||
IntPtr intPtr = NSString.CreateNative(key);
|
||||
if (IsDirectBinding)
|
||||
{
|
||||
Messaging.void_objc_msgSend_IntPtr_IntPtr(base.Handle, selEncodeConditionalObjectForKey_Handle, val.Handle, intPtr);
|
||||
}
|
||||
else
|
||||
{
|
||||
Messaging.void_objc_msgSendSuper_IntPtr_IntPtr(base.SuperHandle, selEncodeConditionalObjectForKey_Handle, val.Handle, intPtr);
|
||||
}
|
||||
NSString.ReleaseNative(intPtr);
|
||||
}
|
||||
|
||||
[Export("encodeObject:forKey:")]
|
||||
public virtual void Encode(NSObject val, string key)
|
||||
{
|
||||
if (val == null)
|
||||
{
|
||||
throw new ArgumentNullException("val");
|
||||
}
|
||||
if (key == null)
|
||||
{
|
||||
throw new ArgumentNullException("key");
|
||||
}
|
||||
IntPtr intPtr = NSString.CreateNative(key);
|
||||
if (IsDirectBinding)
|
||||
{
|
||||
Messaging.void_objc_msgSend_IntPtr_IntPtr(base.Handle, selEncodeObjectForKey_Handle, val.Handle, intPtr);
|
||||
}
|
||||
else
|
||||
{
|
||||
Messaging.void_objc_msgSendSuper_IntPtr_IntPtr(base.SuperHandle, selEncodeObjectForKey_Handle, val.Handle, intPtr);
|
||||
}
|
||||
NSString.ReleaseNative(intPtr);
|
||||
}
|
||||
|
||||
[Export("encodeBool:forKey:")]
|
||||
public virtual void Encode(bool val, string key)
|
||||
{
|
||||
if (key == null)
|
||||
{
|
||||
throw new ArgumentNullException("key");
|
||||
}
|
||||
IntPtr intPtr = NSString.CreateNative(key);
|
||||
if (IsDirectBinding)
|
||||
{
|
||||
Messaging.void_objc_msgSend_bool_IntPtr(base.Handle, selEncodeBoolForKey_Handle, val, intPtr);
|
||||
}
|
||||
else
|
||||
{
|
||||
Messaging.void_objc_msgSendSuper_bool_IntPtr(base.SuperHandle, selEncodeBoolForKey_Handle, val, intPtr);
|
||||
}
|
||||
NSString.ReleaseNative(intPtr);
|
||||
}
|
||||
|
||||
[Export("encodeDouble:forKey:")]
|
||||
public virtual void Encode(double val, string key)
|
||||
{
|
||||
if (key == null)
|
||||
{
|
||||
throw new ArgumentNullException("key");
|
||||
}
|
||||
IntPtr intPtr = NSString.CreateNative(key);
|
||||
if (IsDirectBinding)
|
||||
{
|
||||
Messaging.void_objc_msgSend_Double_IntPtr(base.Handle, selEncodeDoubleForKey_Handle, val, intPtr);
|
||||
}
|
||||
else
|
||||
{
|
||||
Messaging.void_objc_msgSendSuper_Double_IntPtr(base.SuperHandle, selEncodeDoubleForKey_Handle, val, intPtr);
|
||||
}
|
||||
NSString.ReleaseNative(intPtr);
|
||||
}
|
||||
|
||||
[Export("encodeFloat:forKey:")]
|
||||
public virtual void Encode(float val, string key)
|
||||
{
|
||||
if (key == null)
|
||||
{
|
||||
throw new ArgumentNullException("key");
|
||||
}
|
||||
IntPtr intPtr = NSString.CreateNative(key);
|
||||
if (IsDirectBinding)
|
||||
{
|
||||
Messaging.void_objc_msgSend_float_IntPtr(base.Handle, selEncodeFloatForKey_Handle, val, intPtr);
|
||||
}
|
||||
else
|
||||
{
|
||||
Messaging.void_objc_msgSendSuper_float_IntPtr(base.SuperHandle, selEncodeFloatForKey_Handle, val, intPtr);
|
||||
}
|
||||
NSString.ReleaseNative(intPtr);
|
||||
}
|
||||
|
||||
[Export("encodeInt32:forKey:")]
|
||||
public virtual void Encode(int val, string key)
|
||||
{
|
||||
if (key == null)
|
||||
{
|
||||
throw new ArgumentNullException("key");
|
||||
}
|
||||
IntPtr intPtr = NSString.CreateNative(key);
|
||||
if (IsDirectBinding)
|
||||
{
|
||||
Messaging.void_objc_msgSend_int_IntPtr(base.Handle, selEncodeInt32ForKey_Handle, val, intPtr);
|
||||
}
|
||||
else
|
||||
{
|
||||
Messaging.void_objc_msgSendSuper_int_IntPtr(base.SuperHandle, selEncodeInt32ForKey_Handle, val, intPtr);
|
||||
}
|
||||
NSString.ReleaseNative(intPtr);
|
||||
}
|
||||
|
||||
[Export("encodeInt64:forKey:")]
|
||||
public virtual void Encode(long val, string key)
|
||||
{
|
||||
if (key == null)
|
||||
{
|
||||
throw new ArgumentNullException("key");
|
||||
}
|
||||
IntPtr intPtr = NSString.CreateNative(key);
|
||||
if (IsDirectBinding)
|
||||
{
|
||||
Messaging.void_objc_msgSend_Int64_IntPtr(base.Handle, selEncodeInt64ForKey_Handle, val, intPtr);
|
||||
}
|
||||
else
|
||||
{
|
||||
Messaging.void_objc_msgSendSuper_Int64_IntPtr(base.SuperHandle, selEncodeInt64ForKey_Handle, val, intPtr);
|
||||
}
|
||||
NSString.ReleaseNative(intPtr);
|
||||
}
|
||||
|
||||
[Export("encodeBytes:length:forKey:")]
|
||||
public virtual void EncodeBlock(IntPtr bytes, int length, string key)
|
||||
{
|
||||
if (key == null)
|
||||
{
|
||||
throw new ArgumentNullException("key");
|
||||
}
|
||||
IntPtr intPtr = NSString.CreateNative(key);
|
||||
if (IsDirectBinding)
|
||||
{
|
||||
Messaging.void_objc_msgSend_IntPtr_int_IntPtr(base.Handle, selEncodeBytesLengthForKey_Handle, bytes, length, intPtr);
|
||||
}
|
||||
else
|
||||
{
|
||||
Messaging.void_objc_msgSendSuper_IntPtr_int_IntPtr(base.SuperHandle, selEncodeBytesLengthForKey_Handle, bytes, length, intPtr);
|
||||
}
|
||||
NSString.ReleaseNative(intPtr);
|
||||
}
|
||||
|
||||
[Export("containsValueForKey:")]
|
||||
public virtual bool ContainsKey(string key)
|
||||
{
|
||||
if (key == null)
|
||||
{
|
||||
throw new ArgumentNullException("key");
|
||||
}
|
||||
IntPtr intPtr = NSString.CreateNative(key);
|
||||
bool result = (!IsDirectBinding) ? Messaging.bool_objc_msgSendSuper_IntPtr(base.SuperHandle, selContainsValueForKey_Handle, intPtr) : Messaging.bool_objc_msgSend_IntPtr(base.Handle, selContainsValueForKey_Handle, intPtr);
|
||||
NSString.ReleaseNative(intPtr);
|
||||
return result;
|
||||
}
|
||||
|
||||
[Export("decodeBoolForKey:")]
|
||||
public virtual bool DecodeBool(string key)
|
||||
{
|
||||
if (key == null)
|
||||
{
|
||||
throw new ArgumentNullException("key");
|
||||
}
|
||||
IntPtr intPtr = NSString.CreateNative(key);
|
||||
bool result = (!IsDirectBinding) ? Messaging.bool_objc_msgSendSuper_IntPtr(base.SuperHandle, selDecodeBoolForKey_Handle, intPtr) : Messaging.bool_objc_msgSend_IntPtr(base.Handle, selDecodeBoolForKey_Handle, intPtr);
|
||||
NSString.ReleaseNative(intPtr);
|
||||
return result;
|
||||
}
|
||||
|
||||
[Export("decodeDoubleForKey:")]
|
||||
public virtual double DecodeDouble(string key)
|
||||
{
|
||||
if (key == null)
|
||||
{
|
||||
throw new ArgumentNullException("key");
|
||||
}
|
||||
IntPtr intPtr = NSString.CreateNative(key);
|
||||
double result = (!IsDirectBinding) ? Messaging.Double_objc_msgSendSuper_IntPtr(base.SuperHandle, selDecodeDoubleForKey_Handle, intPtr) : Messaging.Double_objc_msgSend_IntPtr(base.Handle, selDecodeDoubleForKey_Handle, intPtr);
|
||||
NSString.ReleaseNative(intPtr);
|
||||
return result;
|
||||
}
|
||||
|
||||
[Export("decodeFloatForKey:")]
|
||||
public virtual float DecodeFloat(string key)
|
||||
{
|
||||
if (key == null)
|
||||
{
|
||||
throw new ArgumentNullException("key");
|
||||
}
|
||||
IntPtr intPtr = NSString.CreateNative(key);
|
||||
float result = (!IsDirectBinding) ? Messaging.float_objc_msgSendSuper_IntPtr(base.SuperHandle, selDecodeFloatForKey_Handle, intPtr) : Messaging.float_objc_msgSend_IntPtr(base.Handle, selDecodeFloatForKey_Handle, intPtr);
|
||||
NSString.ReleaseNative(intPtr);
|
||||
return result;
|
||||
}
|
||||
|
||||
[Export("decodeInt32ForKey:")]
|
||||
public virtual int DecodeInt(string key)
|
||||
{
|
||||
if (key == null)
|
||||
{
|
||||
throw new ArgumentNullException("key");
|
||||
}
|
||||
IntPtr intPtr = NSString.CreateNative(key);
|
||||
int result = (!IsDirectBinding) ? Messaging.int_objc_msgSendSuper_IntPtr(base.SuperHandle, selDecodeInt32ForKey_Handle, intPtr) : Messaging.int_objc_msgSend_IntPtr(base.Handle, selDecodeInt32ForKey_Handle, intPtr);
|
||||
NSString.ReleaseNative(intPtr);
|
||||
return result;
|
||||
}
|
||||
|
||||
[Export("decodeInt64ForKey:")]
|
||||
public virtual long DecodeLong(string key)
|
||||
{
|
||||
if (key == null)
|
||||
{
|
||||
throw new ArgumentNullException("key");
|
||||
}
|
||||
IntPtr intPtr = NSString.CreateNative(key);
|
||||
long result = (!IsDirectBinding) ? Messaging.Int64_objc_msgSendSuper_IntPtr(base.SuperHandle, selDecodeInt64ForKey_Handle, intPtr) : Messaging.Int64_objc_msgSend_IntPtr(base.Handle, selDecodeInt64ForKey_Handle, intPtr);
|
||||
NSString.ReleaseNative(intPtr);
|
||||
return result;
|
||||
}
|
||||
|
||||
[Export("decodeObjectForKey:")]
|
||||
public virtual NSObject DecodeObject(string key)
|
||||
{
|
||||
if (key == null)
|
||||
{
|
||||
throw new ArgumentNullException("key");
|
||||
}
|
||||
IntPtr intPtr = NSString.CreateNative(key);
|
||||
NSObject result = (!IsDirectBinding) ? Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, selDecodeObjectForKey_Handle, intPtr)) : Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, selDecodeObjectForKey_Handle, intPtr));
|
||||
NSString.ReleaseNative(intPtr);
|
||||
return result;
|
||||
}
|
||||
|
||||
[Export("decodeBytesForKey:returnedLength:")]
|
||||
internal virtual IntPtr DecodeBytes(string key, IntPtr length_ptr)
|
||||
{
|
||||
if (key == null)
|
||||
{
|
||||
throw new ArgumentNullException("key");
|
||||
}
|
||||
IntPtr intPtr = NSString.CreateNative(key);
|
||||
IntPtr result = (!IsDirectBinding) ? Messaging.IntPtr_objc_msgSendSuper_IntPtr_IntPtr(base.SuperHandle, selDecodeBytesForKeyReturnedLength_Handle, intPtr, length_ptr) : Messaging.IntPtr_objc_msgSend_IntPtr_IntPtr(base.Handle, selDecodeBytesForKeyReturnedLength_Handle, intPtr, length_ptr);
|
||||
NSString.ReleaseNative(intPtr);
|
||||
return result;
|
||||
}
|
||||
|
||||
[Export("requiresSecureCoding")]
|
||||
public virtual bool RequiresSecureCoding()
|
||||
{
|
||||
if (IsDirectBinding)
|
||||
{
|
||||
return Messaging.bool_objc_msgSend(base.Handle, selRequiresSecureCodingHandle);
|
||||
}
|
||||
return Messaging.bool_objc_msgSendSuper(base.SuperHandle, selRequiresSecureCodingHandle);
|
||||
}
|
||||
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
base.Dispose(disposing);
|
||||
if (base.Handle == IntPtr.Zero)
|
||||
{
|
||||
__mt_AllowedClasses_var = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user