Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit 46000886 authored by Michael KRISPER's avatar Michael KRISPER
Browse files

sealed SI specialized classes, added Repeat Enumerable-Extension

parent bd463f33
No related branches found
No related tags found
No related merge requests found
......@@ -225,5 +225,10 @@ namespace TUGraz.VectoCommon.Utils
}
}
}
public static IEnumerable<T> Repeat<T>(this T element, int count)
{
return Enumerable.Repeat(element, count);
}
}
}
\ No newline at end of file
......@@ -44,7 +44,7 @@ namespace TUGraz.VectoCommon.Utils
/// <summary>
/// SI Class for Scalar Values. Converts implicitely to double and is only castable if the SI value has no units.
/// </summary>
public class Scalar : SIBase<Scalar>
public sealed class Scalar : SIBase<Scalar>
{
[DebuggerHidden]
private Scalar(double val) : base(val) {}
......@@ -112,7 +112,7 @@ namespace TUGraz.VectoCommon.Utils
/// <summary>
/// SI Class for Newton [N].
/// </summary>
public class Newton : SIBase<Newton>
public sealed class Newton : SIBase<Newton>
{
private static readonly Unit[] NumeratorDefault = { Unit.N };
......@@ -149,7 +149,7 @@ namespace TUGraz.VectoCommon.Utils
/// <summary>
/// SI Class for Radian [] (rad).
/// </summary>
public class Radian : SIBase<Radian>
public sealed class Radian : SIBase<Radian>
{
[DebuggerHidden]
private Radian(double val) : base(val) {}
......@@ -158,7 +158,7 @@ namespace TUGraz.VectoCommon.Utils
/// <summary>
/// SI Class for PerSquareSecond [1/s^2].
/// </summary>
public class PerSquareSecond : SIBase<PerSquareSecond>
public sealed class PerSquareSecond : SIBase<PerSquareSecond>
{
private static readonly Unit[] DenominatorDefault = { Unit.s, Unit.s };
......@@ -175,7 +175,7 @@ namespace TUGraz.VectoCommon.Utils
/// <summary>
/// SI Class for Meter per square second [m/s^2].
/// </summary>
public class MeterPerSquareSecond : SIBase<MeterPerSquareSecond>
public sealed class MeterPerSquareSecond : SIBase<MeterPerSquareSecond>
{
private static readonly Unit[] NumeratorDefault = { Unit.m };
private static readonly Unit[] DenominatorDefault = { Unit.s, Unit.s };
......@@ -196,7 +196,7 @@ namespace TUGraz.VectoCommon.Utils
/// <summary>
/// SI Class for Second [s].
/// </summary>
public class Second : SIBase<Second>
public sealed class Second : SIBase<Second>
{
private static readonly Unit[] NumeratorDefault = { Unit.s };
......@@ -207,7 +207,7 @@ namespace TUGraz.VectoCommon.Utils
/// <summary>
/// SI Class for Meter [m].
/// </summary>
public class Meter : SIBase<Meter>
public sealed class Meter : SIBase<Meter>
{
private static readonly Unit[] NumeratorDefault = { Unit.m };
......@@ -239,7 +239,7 @@ namespace TUGraz.VectoCommon.Utils
/// <summary>
/// SI Class for KilogramPerMeter [kg/m].
/// </summary>
public class KilogramPerMeter : SIBase<KilogramPerMeter>
public sealed class KilogramPerMeter : SIBase<KilogramPerMeter>
{
private static readonly Unit[] NumeratorDefault = { Unit.k, Unit.g };
private static readonly Unit[] DenominatorDefault = { Unit.m };
......@@ -248,39 +248,7 @@ namespace TUGraz.VectoCommon.Utils
private KilogramPerMeter(double val) : base(val, NumeratorDefault, DenominatorDefault) {}
}
///// <summary>
///// SI Class for Gram
///// </summary>
//public class Gram : SIBase<Gram>
//{
// private static readonly Unit[] NumeratorDefault = { Unit.g };
// [DebuggerHidden]
// private Gram(double val) : base(val, NumeratorDefault) {}
//}
//public class GramPerSecond : SIBase<GramPerSecond>
//{
// private static readonly Unit[] NumeratorDefault = { Unit.g };
// private static readonly Unit[] DenominatorDefault = { Unit.s };
// private GramPerSecond(double val) : base(val, NumeratorDefault, DenominatorDefault) { }
// public static Gram operator *(GramPerSecond gps, Second s)
// {
// return SIBase<Gram>.Create(gps.Val * s.Value());
// }
//}
//public class GramPerLiter : SIBase<GramPerLiter>
//{
// private static readonly Unit[] NumeratorDefault = { Unit.g };
// private static readonly Unit[] DenominatorDefault = { Unit.liter };
// private GramPerLiter(double val) : base(val, NumeratorDefault, DenominatorDefault) {}
//}
public class LiterPerSecond : SIBase<LiterPerSecond>
public sealed class LiterPerSecond : SIBase<LiterPerSecond>
{
private static readonly Unit[] NumeratorDefault = { Unit.liter };
private static readonly Unit[] DenominatorDefault = { Unit.s };
......@@ -291,7 +259,7 @@ namespace TUGraz.VectoCommon.Utils
/// <summary>
/// SI Class for Kilogram [kg].
/// </summary>
public class Kilogram : SIBase<Kilogram>
public sealed class Kilogram : SIBase<Kilogram>
{
private static readonly Unit[] NumeratorDefault = { Unit.k, Unit.g };
......@@ -322,7 +290,7 @@ namespace TUGraz.VectoCommon.Utils
}
}
public class Liter : SIBase<Liter>
public sealed class Liter : SIBase<Liter>
{
private static readonly Unit[] NumeratorDefault = { Unit.liter };
......@@ -338,7 +306,7 @@ namespace TUGraz.VectoCommon.Utils
/// <summary>
///
/// </summary>
public class NormLiter : SIBase<NormLiter>
public sealed class NormLiter : SIBase<NormLiter>
{
private static readonly Unit[] NumeratorDefault = { Unit.NI };
......@@ -354,7 +322,7 @@ namespace TUGraz.VectoCommon.Utils
/// <summary>
///
/// </summary>
public class NormLiterPerSecond : SIBase<NormLiterPerSecond>
public sealed class NormLiterPerSecond : SIBase<NormLiterPerSecond>
{
private static readonly Unit[] NumeratorDefault = { Unit.NI };
private static readonly Unit[] DenominatorDefault = { Unit.s };
......@@ -376,7 +344,7 @@ namespace TUGraz.VectoCommon.Utils
/// <summary>
/// SI Class for Kilogram per Second [kg].
/// </summary>
public class KilogramPerSecond : SIBase<KilogramPerSecond>
public sealed class KilogramPerSecond : SIBase<KilogramPerSecond>
{
private static readonly Unit[] NumeratorDefault = { Unit.k, Unit.g };
private static readonly Unit[] DenominatorDefault = { Unit.s };
......@@ -394,7 +362,7 @@ namespace TUGraz.VectoCommon.Utils
/// <summary>
/// SI Class for Square meter [m^2].
/// </summary>
public class SquareMeter : SIBase<SquareMeter>
public sealed class SquareMeter : SIBase<SquareMeter>
{
private static readonly Unit[] NumeratorDefault = { Unit.m, Unit.m };
......@@ -417,7 +385,7 @@ namespace TUGraz.VectoCommon.Utils
/// <summary>
/// SI Class for Kilogram Square Meter [kgm^2].
/// </summary>
public class KilogramSquareMeter : SIBase<KilogramSquareMeter>
public sealed class KilogramSquareMeter : SIBase<KilogramSquareMeter>
{
private static readonly Unit[] NumeratorDefault = { Unit.k, Unit.g, Unit.m, Unit.m };
......@@ -434,7 +402,7 @@ namespace TUGraz.VectoCommon.Utils
/// <summary>
/// SI Class for Kilogram Square Meter [kgm^2].
/// </summary>
public class KilogramPerCubicMeter : SIBase<KilogramPerCubicMeter>
public sealed class KilogramPerCubicMeter : SIBase<KilogramPerCubicMeter>
{
private static readonly Unit[] NumeratorDefault = { Unit.k, Unit.g };
private static readonly Unit[] DenominatorDefault = { Unit.m, Unit.m, Unit.m };
......@@ -462,7 +430,7 @@ namespace TUGraz.VectoCommon.Utils
/// <summary>
/// SI Class for Kilogramm per watt second [kg/Ws].
/// </summary>
public class KilogramPerWattSecond : SIBase<KilogramPerWattSecond>
public sealed class KilogramPerWattSecond : SIBase<KilogramPerWattSecond>
{
private static readonly Unit[] NumeratorDefault = { Unit.k, Unit.g };
private static readonly Unit[] DenominatorDefault = { Unit.W, Unit.s };
......@@ -474,7 +442,7 @@ namespace TUGraz.VectoCommon.Utils
/// <summary>
/// SI Class for watt second [Ws].
/// </summary>
public class WattSecond : SIBase<WattSecond>
public sealed class WattSecond : SIBase<WattSecond>
{
private static readonly Unit[] NumeratorDefault = { Unit.W, Unit.s };
......@@ -491,7 +459,7 @@ namespace TUGraz.VectoCommon.Utils
/// <summary>
/// SI Class for Watt [W].
/// </summary>
public class Watt : SIBase<Watt>
public sealed class Watt : SIBase<Watt>
{
private static readonly Unit[] NumeratorDefault = { Unit.W };
......@@ -545,7 +513,7 @@ namespace TUGraz.VectoCommon.Utils
}
}
public class Joule : SIBase<Joule>
public sealed class Joule : SIBase<Joule>
{
private static readonly Unit[] NumeratorDefault = { Unit.W, Unit.s };
......@@ -568,7 +536,7 @@ namespace TUGraz.VectoCommon.Utils
}
}
public class JoulePerKilogramm : SIBase<JoulePerKilogramm>
public sealed class JoulePerKilogramm : SIBase<JoulePerKilogramm>
{
private static readonly Unit[] NumeratorDefault = { Unit.J };
private static readonly Unit[] DenominatorDefault = { Unit.k, Unit.g };
......@@ -585,7 +553,7 @@ namespace TUGraz.VectoCommon.Utils
/// SI Class for one per second [1/s].
/// </summary>
[DebuggerDisplay("rad/s: {this} | rpm: {ConvertTo().Rounds.Per.Minute}")]
public class PerSecond : SIBase<PerSecond>
public sealed class PerSecond : SIBase<PerSecond>
{
private static readonly Unit[] DenominatorDefault = { Unit.s };
......@@ -602,7 +570,7 @@ namespace TUGraz.VectoCommon.Utils
/// SI Class for Meter per second [m/s].
/// </summary>
[DebuggerDisplay("{this} | {ConvertTo().Kilo.Meter.Per.Hour}")]
public class MeterPerSecond : SIBase<MeterPerSecond>
public sealed class MeterPerSecond : SIBase<MeterPerSecond>
{
private static readonly Unit[] NumeratorDefault = { Unit.m };
private static readonly Unit[] DenominatorDefault = { Unit.s };
......@@ -668,7 +636,7 @@ namespace TUGraz.VectoCommon.Utils
/// <summary>
/// SI Class for NewtonMeter [Nm].
/// </summary>
public class NewtonMeter : SIBase<NewtonMeter>
public sealed class NewtonMeter : SIBase<NewtonMeter>
{
private static readonly Unit[] NumeratorDefault = { Unit.N, Unit.m };
......@@ -718,7 +686,7 @@ namespace TUGraz.VectoCommon.Utils
}
}
public class NewtonMeterSecond : SIBase<NewtonMeterSecond>
public sealed class NewtonMeterSecond : SIBase<NewtonMeterSecond>
{
private static readonly Unit[] NumeratorDefault = { Unit.N, Unit.m, Unit.s };
private NewtonMeterSecond(double val) : base(val, NumeratorDefault) {}
......@@ -727,7 +695,7 @@ namespace TUGraz.VectoCommon.Utils
/// <summary>
///
/// </summary>
public class Ampere : SIBase<Ampere>
public sealed class Ampere : SIBase<Ampere>
{
private static readonly Unit[] NumeratorDefault = { Unit.Ampere };
private Ampere(double val) : base(val, NumeratorDefault) {}
......@@ -756,7 +724,7 @@ namespace TUGraz.VectoCommon.Utils
/// <summary>
///
/// </summary>
public class Volt : SIBase<Volt>
public sealed class Volt : SIBase<Volt>
{
private static readonly Unit[] NumeratorDefault = { Unit.Volt };
private Volt(double val) : base(val, NumeratorDefault) {}
......@@ -779,7 +747,7 @@ namespace TUGraz.VectoCommon.Utils
/// <typeparam name="T"></typeparam>
public abstract class SIBase<T> : SI where T : SIBase<T>
{
static T _zeroPrototype;
private static readonly T ZeroPrototype;
static SIBase()
{
......@@ -788,7 +756,7 @@ namespace TUGraz.VectoCommon.Utils
var parameter = Expression.Parameter(typeof(double));
var lambda = Expression.Lambda<Func<double, T>>(Expression.New(constructorInfo, parameter), parameter);
Constructor = lambda.Compile();
_zeroPrototype = Constructor(0);
ZeroPrototype = Constructor(0);
}
/// <summary>
......@@ -803,7 +771,7 @@ namespace TUGraz.VectoCommon.Utils
public static T Create(double val)
{
if (val == 0)
return _zeroPrototype;
return ZeroPrototype;
return Constructor(val);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment