Files
csharp/src/KubernetesClient/Fractions/Fraction.cs
Frederik Carlier cd7cda5836 Mark all Fractions classes as internal (#265)
* Mark all Fractions classes as internal

* Rename the Fractions namespace to k8s.Internal.Fractions
2019-03-22 10:30:51 -07:00

82 lines
2.9 KiB
C#

using System;
using System.ComponentModel;
using System.Numerics;
using System.Runtime.InteropServices;
using k8s.Internal.Fractions.TypeConverters;
namespace k8s.Internal.Fractions {
/// <summary>
/// A mathematical fraction. A rational number written as a/b (a is the numerator and b the denominator).
/// The data type is not capable to store NaN (not a number) or infinite.
/// </summary>
[TypeConverter(typeof (FractionTypeConverter))]
[StructLayout(LayoutKind.Sequential)]
internal partial struct Fraction : IEquatable<Fraction>, IComparable, IComparable<Fraction>, IFormattable {
private static readonly BigInteger MIN_DECIMAL = new BigInteger(decimal.MinValue);
private static readonly BigInteger MAX_DECIMAL = new BigInteger(decimal.MaxValue);
private static readonly Fraction _zero = new Fraction(BigInteger.Zero, BigInteger.Zero, FractionState.IsNormalized);
private static readonly Fraction _one = new Fraction(BigInteger.One, BigInteger.One, FractionState.IsNormalized);
private static readonly Fraction _minus_one = new Fraction(BigInteger.MinusOne, BigInteger.One, FractionState.IsNormalized);
private readonly BigInteger _denominator;
private readonly BigInteger _numerator;
private readonly FractionState _state;
/// <summary>
/// The numerator.
/// </summary>
public BigInteger Numerator => _numerator;
/// <summary>
/// The denominator
/// </summary>
public BigInteger Denominator => _denominator;
/// <summary>
/// <c>true</c> if the value is positive (greater than or equal to 0).
/// </summary>
public bool IsPositive => _numerator.Sign == 1 && _denominator.Sign == 1 ||
_numerator.Sign == -1 && _denominator.Sign == -1;
/// <summary>
/// <c>true</c> if the value is negative (lesser than 0).
/// </summary>
public bool IsNegative => _numerator.Sign == -1 && _denominator.Sign == 1 ||
_numerator.Sign == 1 && _denominator.Sign == -1;
/// <summary>
/// <c>true</c> if the fraction has a real (calculated) value of 0.
/// </summary>
public bool IsZero => _numerator.IsZero || _denominator.IsZero;
/// <summary>
/// The fraction's state.
/// </summary>
public FractionState State => _state;
/// <summary>
/// A fraction with the reduced/simplified value of 0.
/// </summary>
public static Fraction Zero => _zero;
/// <summary>
/// A fraction with the reduced/simplified value of 1.
/// </summary>
public static Fraction One => _one;
/// <summary>
/// A fraction with the reduced/simplified value of -1.
/// </summary>
public static Fraction MinusOne => _minus_one;
}
}