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

509 lines
18 KiB
C#

using CPF.Mac.ObjCRuntime;
using System;
using System.ComponentModel;
namespace CPF.Mac.Foundation
{
[Register("NSDecimalNumber", true)]
public class NSDecimalNumber : NSNumber
{
private static readonly IntPtr selDecimalValueHandle = Selector.GetHandle("decimalValue");
private static readonly IntPtr selZeroHandle = Selector.GetHandle("zero");
private static readonly IntPtr selOneHandle = Selector.GetHandle("one");
private static readonly IntPtr selMinimumDecimalNumberHandle = Selector.GetHandle("minimumDecimalNumber");
private static readonly IntPtr selMaximumDecimalNumberHandle = Selector.GetHandle("maximumDecimalNumber");
private static readonly IntPtr selNotANumberHandle = Selector.GetHandle("notANumber");
private static readonly IntPtr selDefaultBehaviorHandle = Selector.GetHandle("defaultBehavior");
private static readonly IntPtr selSetDefaultBehavior_Handle = Selector.GetHandle("setDefaultBehavior:");
private static readonly IntPtr selDoubleValueHandle = Selector.GetHandle("doubleValue");
private static readonly IntPtr selInitWithMantissaExponentIsNegative_Handle = Selector.GetHandle("initWithMantissa:exponent:isNegative:");
private static readonly IntPtr selInitWithDecimal_Handle = Selector.GetHandle("initWithDecimal:");
private static readonly IntPtr selInitWithString_Handle = Selector.GetHandle("initWithString:");
private static readonly IntPtr selInitWithStringLocale_Handle = Selector.GetHandle("initWithString:locale:");
private static readonly IntPtr selDescriptionWithLocale_Handle = Selector.GetHandle("descriptionWithLocale:");
private static readonly IntPtr selDecimalNumberByAdding_Handle = Selector.GetHandle("decimalNumberByAdding:");
private static readonly IntPtr selDecimalNumberByAddingWithBehavior_Handle = Selector.GetHandle("decimalNumberByAdding:withBehavior:");
private static readonly IntPtr selDecimalNumberBySubtracting_Handle = Selector.GetHandle("decimalNumberBySubtracting:");
private static readonly IntPtr selDecimalNumberBySubtractingWithBehavior_Handle = Selector.GetHandle("decimalNumberBySubtracting:withBehavior:");
private static readonly IntPtr selDecimalNumberByMultiplyingBy_Handle = Selector.GetHandle("decimalNumberByMultiplyingBy:");
private static readonly IntPtr selDecimalNumberByMultiplyingByWithBehavior_Handle = Selector.GetHandle("decimalNumberByMultiplyingBy:withBehavior:");
private static readonly IntPtr selDecimalNumberByDividingBy_Handle = Selector.GetHandle("decimalNumberByDividingBy:");
private static readonly IntPtr selDecimalNumberByDividingByWithBehavior_Handle = Selector.GetHandle("decimalNumberByDividingBy:withBehavior:");
private static readonly IntPtr selDecimalNumberByRaisingToPower_Handle = Selector.GetHandle("decimalNumberByRaisingToPower:");
private static readonly IntPtr selDecimalNumberByRaisingToPowerWithBehavior_Handle = Selector.GetHandle("decimalNumberByRaisingToPower:withBehavior:");
private static readonly IntPtr selDecimalNumberByMultiplyingByPowerOf10_Handle = Selector.GetHandle("decimalNumberByMultiplyingByPowerOf10:");
private static readonly IntPtr selDecimalNumberByMultiplyingByPowerOf10WithBehavior_Handle = Selector.GetHandle("decimalNumberByMultiplyingByPowerOf10:withBehavior:");
private static readonly IntPtr selDecimalNumberByRoundingAccordingToBehavior_Handle = Selector.GetHandle("decimalNumberByRoundingAccordingToBehavior:");
private static readonly IntPtr selCompare_Handle = Selector.GetHandle("compare:");
private static readonly IntPtr class_ptr = Class.GetHandle("NSDecimalNumber");
private static object __mt_Zero_var_static;
private static object __mt_One_var_static;
private static object __mt_MinValue_var_static;
private static object __mt_MaxValue_var_static;
private static object __mt_NaN_var_static;
private static object __mt_DefaultBehavior_var_static;
public override IntPtr ClassHandle => class_ptr;
public new virtual NSDecimal NSDecimalValue
{
[Export("decimalValue")]
get
{
NSDecimal retval;
if (IsDirectBinding)
{
Messaging.NSDecimal_objc_msgSend_stret(out retval, base.Handle, selDecimalValueHandle);
}
else
{
Messaging.NSDecimal_objc_msgSendSuper_stret(out retval, base.SuperHandle, selDecimalValueHandle);
}
return retval;
}
}
public static NSDecimalNumber Zero
{
[Export("zero")]
get
{
return (NSDecimalNumber)(__mt_Zero_var_static = (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(class_ptr, selZeroHandle)));
}
}
public static NSDecimalNumber One
{
[Export("one")]
get
{
return (NSDecimalNumber)(__mt_One_var_static = (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(class_ptr, selOneHandle)));
}
}
public static NSDecimalNumber MinValue
{
[Export("minimumDecimalNumber")]
get
{
return (NSDecimalNumber)(__mt_MinValue_var_static = (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(class_ptr, selMinimumDecimalNumberHandle)));
}
}
public static NSDecimalNumber MaxValue
{
[Export("maximumDecimalNumber")]
get
{
return (NSDecimalNumber)(__mt_MaxValue_var_static = (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(class_ptr, selMaximumDecimalNumberHandle)));
}
}
public static NSDecimalNumber NaN
{
[Export("notANumber")]
get
{
return (NSDecimalNumber)(__mt_NaN_var_static = (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(class_ptr, selNotANumberHandle)));
}
}
public static NSObject DefaultBehavior
{
[Export("defaultBehavior")]
get
{
return (NSObject)(__mt_DefaultBehavior_var_static = Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(class_ptr, selDefaultBehaviorHandle)));
}
[Export("setDefaultBehavior:")]
set
{
if (value == null)
{
throw new ArgumentNullException("value");
}
Messaging.void_objc_msgSend_IntPtr(class_ptr, selSetDefaultBehavior_Handle, value.Handle);
}
}
public new virtual double DoubleValue
{
[Export("doubleValue")]
get
{
if (IsDirectBinding)
{
return Messaging.Double_objc_msgSend(base.Handle, selDoubleValueHandle);
}
return Messaging.Double_objc_msgSendSuper(base.SuperHandle, selDoubleValueHandle);
}
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
[Export("init")]
public NSDecimalNumber()
: 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 NSDecimalNumber(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 NSDecimalNumber(NSObjectFlag t)
: base(t)
{
}
[EditorBrowsable(EditorBrowsableState.Advanced)]
public NSDecimalNumber(IntPtr handle)
: base(handle)
{
}
[Export("initWithMantissa:exponent:isNegative:")]
public NSDecimalNumber(long mantissa, short exponent, bool isNegative)
: base(NSObjectFlag.Empty)
{
if (IsDirectBinding)
{
base.Handle = Messaging.IntPtr_objc_msgSend_Int64_short_bool(base.Handle, selInitWithMantissaExponentIsNegative_Handle, mantissa, exponent, isNegative);
}
else
{
base.Handle = Messaging.IntPtr_objc_msgSendSuper_Int64_short_bool(base.SuperHandle, selInitWithMantissaExponentIsNegative_Handle, mantissa, exponent, isNegative);
}
}
[Export("initWithDecimal:")]
public NSDecimalNumber(NSDecimal dec)
: base(NSObjectFlag.Empty)
{
if (IsDirectBinding)
{
base.Handle = Messaging.IntPtr_objc_msgSend_NSDecimal(base.Handle, selInitWithDecimal_Handle, dec);
}
else
{
base.Handle = Messaging.IntPtr_objc_msgSendSuper_NSDecimal(base.SuperHandle, selInitWithDecimal_Handle, dec);
}
}
[Export("initWithString:")]
public NSDecimalNumber(string numberValue)
: base(NSObjectFlag.Empty)
{
if (numberValue == null)
{
throw new ArgumentNullException("numberValue");
}
IntPtr intPtr = NSString.CreateNative(numberValue);
if (IsDirectBinding)
{
base.Handle = Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, selInitWithString_Handle, intPtr);
}
else
{
base.Handle = Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, selInitWithString_Handle, intPtr);
}
NSString.ReleaseNative(intPtr);
}
[Export("initWithString:locale:")]
public NSDecimalNumber(string numberValue, NSObject locale)
: base(NSObjectFlag.Empty)
{
if (numberValue == null)
{
throw new ArgumentNullException("numberValue");
}
if (locale == null)
{
throw new ArgumentNullException("locale");
}
IntPtr intPtr = NSString.CreateNative(numberValue);
if (IsDirectBinding)
{
base.Handle = Messaging.IntPtr_objc_msgSend_IntPtr_IntPtr(base.Handle, selInitWithStringLocale_Handle, intPtr, locale.Handle);
}
else
{
base.Handle = Messaging.IntPtr_objc_msgSendSuper_IntPtr_IntPtr(base.SuperHandle, selInitWithStringLocale_Handle, intPtr, locale.Handle);
}
NSString.ReleaseNative(intPtr);
}
[Export("descriptionWithLocale:")]
public new virtual string DescriptionWithLocale(NSLocale locale)
{
if (locale == null)
{
throw new ArgumentNullException("locale");
}
if (IsDirectBinding)
{
return NSString.FromHandle(Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, selDescriptionWithLocale_Handle, locale.Handle));
}
return NSString.FromHandle(Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, selDescriptionWithLocale_Handle, locale.Handle));
}
[Export("decimalNumberByAdding:")]
public virtual NSDecimalNumber Add(NSDecimalNumber d)
{
if (d == null)
{
throw new ArgumentNullException("d");
}
if (IsDirectBinding)
{
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, selDecimalNumberByAdding_Handle, d.Handle));
}
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, selDecimalNumberByAdding_Handle, d.Handle));
}
[Export("decimalNumberByAdding:withBehavior:")]
public virtual NSDecimalNumber Add(NSDecimalNumber d, NSObject Behavior)
{
if (d == null)
{
throw new ArgumentNullException("d");
}
if (Behavior == null)
{
throw new ArgumentNullException("Behavior");
}
if (IsDirectBinding)
{
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr_IntPtr(base.Handle, selDecimalNumberByAddingWithBehavior_Handle, d.Handle, Behavior.Handle));
}
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper_IntPtr_IntPtr(base.SuperHandle, selDecimalNumberByAddingWithBehavior_Handle, d.Handle, Behavior.Handle));
}
[Export("decimalNumberBySubtracting:")]
public virtual NSDecimalNumber Subtract(NSDecimalNumber d)
{
if (d == null)
{
throw new ArgumentNullException("d");
}
if (IsDirectBinding)
{
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, selDecimalNumberBySubtracting_Handle, d.Handle));
}
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, selDecimalNumberBySubtracting_Handle, d.Handle));
}
[Export("decimalNumberBySubtracting:withBehavior:")]
public virtual NSDecimalNumber Subtract(NSDecimalNumber d, NSObject Behavior)
{
if (d == null)
{
throw new ArgumentNullException("d");
}
if (Behavior == null)
{
throw new ArgumentNullException("Behavior");
}
if (IsDirectBinding)
{
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr_IntPtr(base.Handle, selDecimalNumberBySubtractingWithBehavior_Handle, d.Handle, Behavior.Handle));
}
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper_IntPtr_IntPtr(base.SuperHandle, selDecimalNumberBySubtractingWithBehavior_Handle, d.Handle, Behavior.Handle));
}
[Export("decimalNumberByMultiplyingBy:")]
public virtual NSDecimalNumber Multiply(NSDecimalNumber d)
{
if (d == null)
{
throw new ArgumentNullException("d");
}
if (IsDirectBinding)
{
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, selDecimalNumberByMultiplyingBy_Handle, d.Handle));
}
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, selDecimalNumberByMultiplyingBy_Handle, d.Handle));
}
[Export("decimalNumberByMultiplyingBy:withBehavior:")]
public virtual NSDecimalNumber Multiply(NSDecimalNumber d, NSObject Behavior)
{
if (d == null)
{
throw new ArgumentNullException("d");
}
if (Behavior == null)
{
throw new ArgumentNullException("Behavior");
}
if (IsDirectBinding)
{
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr_IntPtr(base.Handle, selDecimalNumberByMultiplyingByWithBehavior_Handle, d.Handle, Behavior.Handle));
}
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper_IntPtr_IntPtr(base.SuperHandle, selDecimalNumberByMultiplyingByWithBehavior_Handle, d.Handle, Behavior.Handle));
}
[Export("decimalNumberByDividingBy:")]
public virtual NSDecimalNumber Divide(NSDecimalNumber d)
{
if (d == null)
{
throw new ArgumentNullException("d");
}
if (IsDirectBinding)
{
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, selDecimalNumberByDividingBy_Handle, d.Handle));
}
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, selDecimalNumberByDividingBy_Handle, d.Handle));
}
[Export("decimalNumberByDividingBy:withBehavior:")]
public virtual NSDecimalNumber Divide(NSDecimalNumber d, NSObject Behavior)
{
if (d == null)
{
throw new ArgumentNullException("d");
}
if (Behavior == null)
{
throw new ArgumentNullException("Behavior");
}
if (IsDirectBinding)
{
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr_IntPtr(base.Handle, selDecimalNumberByDividingByWithBehavior_Handle, d.Handle, Behavior.Handle));
}
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper_IntPtr_IntPtr(base.SuperHandle, selDecimalNumberByDividingByWithBehavior_Handle, d.Handle, Behavior.Handle));
}
[Export("decimalNumberByRaisingToPower:")]
public virtual NSDecimalNumber RaiseTo(ulong power)
{
if (IsDirectBinding)
{
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_UInt64(base.Handle, selDecimalNumberByRaisingToPower_Handle, power));
}
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper_UInt64(base.SuperHandle, selDecimalNumberByRaisingToPower_Handle, power));
}
[Export("decimalNumberByRaisingToPower:withBehavior:")]
public virtual NSDecimalNumber RaiseTo(ulong power, NSObject Behavior)
{
if (Behavior == null)
{
throw new ArgumentNullException("Behavior");
}
if (IsDirectBinding)
{
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_UInt64_IntPtr(base.Handle, selDecimalNumberByRaisingToPowerWithBehavior_Handle, power, Behavior.Handle));
}
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper_UInt64_IntPtr(base.SuperHandle, selDecimalNumberByRaisingToPowerWithBehavior_Handle, power, Behavior.Handle));
}
[Export("decimalNumberByMultiplyingByPowerOf10:")]
public virtual NSDecimalNumber MultiplyPowerOf10(short power)
{
if (IsDirectBinding)
{
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_short(base.Handle, selDecimalNumberByMultiplyingByPowerOf10_Handle, power));
}
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper_short(base.SuperHandle, selDecimalNumberByMultiplyingByPowerOf10_Handle, power));
}
[Export("decimalNumberByMultiplyingByPowerOf10:withBehavior:")]
public virtual NSDecimalNumber MultiplyPowerOf10(short power, NSObject Behavior)
{
if (Behavior == null)
{
throw new ArgumentNullException("Behavior");
}
if (IsDirectBinding)
{
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_short_IntPtr(base.Handle, selDecimalNumberByMultiplyingByPowerOf10WithBehavior_Handle, power, Behavior.Handle));
}
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper_short_IntPtr(base.SuperHandle, selDecimalNumberByMultiplyingByPowerOf10WithBehavior_Handle, power, Behavior.Handle));
}
[Export("decimalNumberByRoundingAccordingToBehavior:")]
public virtual NSDecimalNumber Rounding(NSObject behavior)
{
if (behavior == null)
{
throw new ArgumentNullException("behavior");
}
if (IsDirectBinding)
{
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, selDecimalNumberByRoundingAccordingToBehavior_Handle, behavior.Handle));
}
return (NSDecimalNumber)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, selDecimalNumberByRoundingAccordingToBehavior_Handle, behavior.Handle));
}
[Export("compare:")]
public new virtual long Compare(NSNumber 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);
}
}
}