00001
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef _Mass_h
00029 #define _Mass_h
00030
00031
00032 #include "Quantities/Quantity/Variable.h"
00033 #include "Quantities/Quantity/Constant.h"
00034 #include "Quantities/Quantity/QuantityAggregates.h"
00035
00036 namespace quantity {
00037 namespace mass {
00038
00040 class Class;
00041
00043 class Unit;
00044
00045
00046 class GramUnits;
00047 class ElectronMassUnit;
00048 class DaltonUnit;
00049 class UUnit;
00050 class GammaUnit;
00051 class TonneUnits;
00052 class PoundUnit;
00053 class OunceUnit;
00054 class TroyOunceUnit;
00055 class GrainUnit;
00056
00058 typedef unit::Prefixable<Unit, GramUnits> Grams;
00059
00061 typedef unit::Prefixed<Grams> Gram;
00062 typedef unit::Prefixed<Grams, unit::Milli> MilliGram;
00063 typedef unit::Prefixed<Grams, unit::Micro> MicroGram;
00064 typedef unit::Prefixed<Grams, unit::Nano> NanoGram;
00065 typedef unit::Prefixed<Grams, unit::Pico> PicoGram;
00066 typedef unit::Prefixed<Grams, unit::Kilo> KiloGram;
00067
00069 typedef unit::NonPrefixable<Unit, ElectronMassUnit> ElectronMass;
00070
00072 typedef unit::NonPrefixable<Unit, DaltonUnit> Dalton;
00073
00075 typedef unit::NonPrefixable<Unit, UUnit> U;
00076
00078 typedef unit::NonPrefixable<Unit, GammaUnit> Gamma;
00079
00081 typedef unit::Prefixable<Unit, TonneUnits> Tonnes;
00082
00084 typedef unit::Prefixed<Tonnes> Tonne;
00085 typedef unit::Prefixed<Tonnes, unit::Kilo> KiloTonne;
00086 typedef unit::Prefixed<Tonnes, unit::Mega> MegaTonne;
00087
00089
00090 typedef unit::NonPrefixable<Unit, PoundUnit> Pound;
00091
00093 typedef unit::NonPrefixable<Unit, OunceUnit> Ounce;
00094
00096 typedef unit::NonPrefixable<Unit, TroyOunceUnit> TroyOunce;
00097
00099 typedef unit::NonPrefixable<Unit, GrainUnit> Grain;
00100
00102 typedef
00103 Loki::Typelist<Grams, Loki::Typelist<Tonnes, Loki::Typelist<ElectronMass,
00104 Loki::Typelist<Dalton, Loki::Typelist<U, Loki::Typelist<Gamma,
00105 Loki::Typelist<Pound, Loki::Typelist<Ounce, Loki::Typelist<TroyOunce,
00106 Loki::Typelist<Grain, Loki::NullType> > > > > > > > > > Units;
00107
00108
00109 typedef Gram g;
00110 typedef KiloGram kg;
00111
00112
00113 typedef Quantity<Class> Quantity;
00114
00115 class DerivedMass;
00116
00117 }
00118
00120 template<>
00121 struct QuantityTraits<mass::Class>
00122 {
00123 typedef
00124 dimension::Dimension<BSUtilities::Rational<0>,
00125 BSUtilities::Rational<1>, BSUtilities::Rational<0>,
00126 BSUtilities::Rational<0>, BSUtilities::Rational<0>,
00127 BSUtilities::Rational<0>, BSUtilities::Rational<0> > Dimension;
00128 typedef mass::Unit UnitType;
00129 typedef mass::Units UnitList;
00130 typedef mass::KiloGram DefaultUnit;
00131
00132 typedef mass::DerivedMass DefaultDerivedQuantityType;
00133
00134 static const std::string NameString ();
00135 static const std::string SymbolString ();
00136
00137 };
00138
00139
00140 template<>
00141 struct DerivedQuantityTraits<mass::Class, mass::DerivedMass>
00142 {
00143 static const bool OverwriteName = false;
00144 static const bool OverwriteSymbol = false;
00145
00146 static const std::string NameString ();
00147 static const std::string SymbolString ();
00148
00149 };
00150
00152 typedef Variable<mass::Quantity> Mass;
00153
00155 typedef Constant<mass::Quantity> MassConstant;
00156
00158 typedef VariableVector<QuantityVector<mass::Class> > MassVector;
00159
00160 }
00161
00162 #endif