00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef _Fraction_h
00028 #define _Fraction_h
00029
00030
00031 #include "Quantities/Quantity/Variable.h"
00032 #include "Quantities/Quantity/Constant.h"
00033 #include "Quantities/Quantity/QuantityAggregates.h"
00034
00035 namespace quantity {
00036 namespace fraction {
00037
00039 class Class;
00040
00042 class Unit;
00043
00044
00045 class UnityUnit;
00046 class PercentUnit;
00047 class PermilleUnit;
00048 class PpmUnit;
00049
00051 typedef unit::NonPrefixable<Unit, UnityUnit> Unity;
00052
00054 typedef unit::NonPrefixable<Unit, PercentUnit> Percent;
00055
00057 typedef unit::NonPrefixable<Unit, PermilleUnit> Permille;
00058
00060 typedef unit::NonPrefixable<Unit, PpmUnit> Ppm;
00061
00063 typedef Loki::Typelist<Unity, Loki::Typelist<Percent,
00064 Loki::Typelist<Permille, Loki::Typelist<Ppm, Loki::NullType> > > > Units;
00065
00066
00067
00068 typedef Quantity<Class> Quantity;
00069
00070 class DerivedFraction;
00071
00072 }
00073
00075 template<>
00076 struct QuantityTraits<fraction::Class>
00077 {
00078 typedef
00079 dimension::Dimension<BSUtilities::Rational<0>,
00080 BSUtilities::Rational<0>, BSUtilities::Rational<0>,
00081 BSUtilities::Rational<0>, BSUtilities::Rational<0>,
00082 BSUtilities::Rational<0>, BSUtilities::Rational<0> > Dimension;
00083 typedef fraction::Unit UnitType;
00084 typedef fraction::Units UnitList;
00085 typedef fraction::Unity DefaultUnit;
00086
00087 typedef fraction::DerivedFraction DefaultDerivedQuantityType;
00088
00089 static const std::string NameString ();
00090 static const std::string SymbolString ();
00091
00092 };
00093
00094
00095 template<>
00096 struct DerivedQuantityTraits<fraction::Class, fraction::DerivedFraction>
00097 {
00098 static const bool OverwriteName = false;
00099 static const bool OverwriteSymbol = false;
00100
00101 static const std::string NameString ();
00102 static const std::string SymbolString ();
00103
00104 };
00105
00107 typedef Variable<fraction::Quantity> Fraction;
00108
00110 typedef Constant<fraction::Quantity> FractionConstant;
00111
00113 typedef VariableVector<QuantityVector<fraction::Class> > FractionVector;
00114
00115 }
00116
00117 #endif