00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef _AmountOfSubstance_h
00028 #define _AmountOfSubstance_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 amountOfSubstance {
00037
00039 class Class;
00040
00042 class Unit;
00043
00044
00045 class MoleUnits;
00046
00048 typedef unit::Prefixable<Unit, MoleUnits> Moles;
00049
00051 typedef unit::Prefixed<Moles> Mole;
00052
00054 typedef unit::Prefixed<Moles, unit::Milli> MilliMole;
00055
00057 typedef Loki::Typelist<Moles, Loki::NullType> Units;
00058
00059
00060
00061 typedef Mole mol;
00062 typedef MilliMole mmol;
00063
00064
00065
00066 typedef Quantity<Class> Quantity;
00067
00068 class DerivedAmountOfSubstance;
00069
00070 }
00071
00073 template<>
00074 struct QuantityTraits<amountOfSubstance::Class>
00075 {
00076 typedef
00077 dimension::Dimension<BSUtilities::Rational<0>,
00078 BSUtilities::Rational<0>, BSUtilities::Rational<0>,
00079 BSUtilities::Rational<0>, BSUtilities::Rational<0>,
00080 BSUtilities::Rational<1>, BSUtilities::Rational<0> > Dimension;
00081 typedef amountOfSubstance::Unit UnitType;
00082 typedef amountOfSubstance::Units UnitList;
00083 typedef amountOfSubstance::Mole DefaultUnit;
00084
00085 typedef amountOfSubstance::DerivedAmountOfSubstance
00086 DefaultDerivedQuantityType;
00087
00088 static const std::string NameString ();
00089 static const std::string SymbolString ();
00090
00091 };
00092
00093
00094 template<>
00095 struct DerivedQuantityTraits<amountOfSubstance::Class,
00096 amountOfSubstance::DerivedAmountOfSubstance>
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<amountOfSubstance::Quantity> AmountOfSubstance;
00108
00110 typedef Constant<amountOfSubstance::Quantity> AmountOfSubstanceConstant;
00111
00113 typedef VariableVector<QuantityVector<amountOfSubstance::Class> >
00114 AmountOfSubstanceVector;
00115
00116 }
00117
00118 #endif