120 lines
4.1 KiB
C#
120 lines
4.1 KiB
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace CPF.Mac.Foundation
|
|
{
|
|
public struct NSDecimal
|
|
{
|
|
public int fields;
|
|
|
|
public short m1;
|
|
|
|
public short m2;
|
|
|
|
public short m3;
|
|
|
|
public short m4;
|
|
|
|
public short m5;
|
|
|
|
public short m6;
|
|
|
|
public short m7;
|
|
|
|
public short m8;
|
|
|
|
[DllImport("/System/Library/Frameworks/Foundation.framework/Foundation", EntryPoint = "NSDecimalCompare")]
|
|
public static extern NSComparisonResult Compare(ref NSDecimal left, ref NSDecimal right);
|
|
|
|
[DllImport("/System/Library/Frameworks/Foundation.framework/Foundation", EntryPoint = "NSDecimalRound")]
|
|
public static extern void Round(out NSDecimal result, ref NSDecimal number, int scale, NSRoundingMode mode);
|
|
|
|
[DllImport("/System/Library/Frameworks/Foundation.framework/Foundation", EntryPoint = "NSDecimalNormalize")]
|
|
public static extern NSCalculationError Normalize(ref NSDecimal number1, ref NSDecimal number2);
|
|
|
|
[DllImport("/System/Library/Frameworks/Foundation.framework/Foundation", EntryPoint = "NSDecimalAdd")]
|
|
public static extern NSCalculationError Add(out NSDecimal result, ref NSDecimal left, ref NSDecimal right, NSRoundingMode mode);
|
|
|
|
[DllImport("/System/Library/Frameworks/Foundation.framework/Foundation", EntryPoint = "NSDecimalSubtract")]
|
|
public static extern NSCalculationError Subtract(out NSDecimal result, ref NSDecimal left, ref NSDecimal right, NSRoundingMode mode);
|
|
|
|
[DllImport("/System/Library/Frameworks/Foundation.framework/Foundation", EntryPoint = "NSDecimalMultiply")]
|
|
public static extern NSCalculationError Multiply(out NSDecimal result, ref NSDecimal left, ref NSDecimal right, NSRoundingMode mode);
|
|
|
|
[DllImport("/System/Library/Frameworks/Foundation.framework/Foundation", EntryPoint = "NSDecimalDivide")]
|
|
public static extern NSCalculationError Divide(out NSDecimal result, ref NSDecimal left, ref NSDecimal right, NSRoundingMode mode);
|
|
|
|
[DllImport("/System/Library/Frameworks/Foundation.framework/Foundation", EntryPoint = "NSDecimalPower")]
|
|
public static extern NSComparisonResult Power(out NSDecimal result, ref NSDecimal number, int power, NSRoundingMode mode);
|
|
|
|
[DllImport("/System/Library/Frameworks/Foundation.framework/Foundation", EntryPoint = "NSDecimalMultiplyByPowerOf10")]
|
|
public static extern NSComparisonResult MultiplyByPowerOf10(out NSDecimal result, ref NSDecimal number, short power10, NSRoundingMode mode);
|
|
|
|
[DllImport("/System/Library/Frameworks/Foundation.framework/Foundation", EntryPoint = "NSDecimalMultiplyByPowerOf10")]
|
|
private static extern IntPtr NSDecimalString(ref NSDecimal value, IntPtr locale);
|
|
|
|
public override string ToString()
|
|
{
|
|
return $"{fields}:{m1}{m2}{m3}{m4}{m5}{m6}{m7}{m8}";
|
|
}
|
|
|
|
public static NSDecimal operator +(NSDecimal left, NSDecimal right)
|
|
{
|
|
Add(out NSDecimal result, ref left, ref right, NSRoundingMode.Plain);
|
|
return result;
|
|
}
|
|
|
|
public static NSDecimal operator -(NSDecimal left, NSDecimal right)
|
|
{
|
|
Subtract(out NSDecimal result, ref left, ref right, NSRoundingMode.Plain);
|
|
return result;
|
|
}
|
|
|
|
public static NSDecimal operator *(NSDecimal left, NSDecimal right)
|
|
{
|
|
Multiply(out NSDecimal result, ref left, ref right, NSRoundingMode.Plain);
|
|
return result;
|
|
}
|
|
|
|
public static NSDecimal operator /(NSDecimal left, NSDecimal right)
|
|
{
|
|
Divide(out NSDecimal result, ref left, ref right, NSRoundingMode.Plain);
|
|
return result;
|
|
}
|
|
|
|
public static bool operator ==(NSDecimal left, NSDecimal right)
|
|
{
|
|
return Compare(ref left, ref right) == NSComparisonResult.Same;
|
|
}
|
|
|
|
public static bool operator !=(NSDecimal left, NSDecimal right)
|
|
{
|
|
return Compare(ref left, ref right) != NSComparisonResult.Same;
|
|
}
|
|
|
|
public static implicit operator NSDecimal(int value)
|
|
{
|
|
return new NSNumber(value).NSDecimalValue;
|
|
}
|
|
|
|
public static explicit operator int(NSDecimal value)
|
|
{
|
|
return new NSDecimalNumber(value).Int32Value;
|
|
}
|
|
|
|
public override bool Equals(object obj)
|
|
{
|
|
if (!(obj is NSDecimal))
|
|
{
|
|
return false;
|
|
}
|
|
return this == (NSDecimal)obj;
|
|
}
|
|
|
|
public override int GetHashCode()
|
|
{
|
|
return fields ^ m1 ^ m2 ^ m3 ^ m4 ^ m5 ^ m6 ^ m7 ^ m8;
|
|
}
|
|
}
|
|
}
|