00001
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef temperatureConversion_h
00030 #define temperatureConversion_h
00031
00032
00033 #include "Quantities/PhysicalQuantities/ThermodynamicTemperature.h"
00034 #include "Quantities/PhysicalQuantities/CelsiusTemperature.h"
00035 #include "Quantities/PhysicalQuantities/FahrenheitTemperature.h"
00036
00037 namespace quantity {
00038
00040
00042
00044
00046 template<template<typename, typename> class M, typename ST, typename SU,
00047 typename DQT, template<typename, typename> class SM, typename SST,
00048 typename SSU, typename SDQT>
00049 struct convertValue<M<Quantity<thermodynamicTemperature::Class, ST>,
00050 DerivedQuantity<thermodynamicTemperature::Class, SU, DQT> >,
00051 SM<Quantity<celsiusTemperature::Class, SST>,
00052 DerivedQuantity<celsiusTemperature::Class, SSU, SDQT> > >
00053 {
00054 static ST exec (const SM<Quantity<celsiusTemperature::Class, SST>,
00055 DerivedQuantity<celsiusTemperature::Class, SSU, SDQT> > & quantity)
00056 {return unit::Reverse<SU>::VAL (unit::Standard<SSU>::VAL
00057 (quantity.value ()) + 273.15);}
00058 };
00059
00061
00063 template<template<typename, typename> class M, typename ST, typename SU,
00064 typename DQT, template<typename, typename> class SM, typename SST,
00065 typename SSU, typename SDQT>
00066 struct convertValue<M<Quantity<thermodynamicTemperature::Class, ST>,
00067 DerivedQuantity<thermodynamicTemperature::Class, SU, DQT> >,
00068 SM<Quantity<fahrenheitTemperature::Class, SST>,
00069 DerivedQuantity<fahrenheitTemperature::Class, SSU, SDQT> > >
00070 {
00071 static ST exec (const SM<Quantity<fahrenheitTemperature::Class, SST>,
00072 DerivedQuantity<fahrenheitTemperature::Class, SSU, SDQT> > & quantity)
00073 {return unit::Reverse<SU>::VAL (5./9. * unit::Standard<SSU>::VAL
00074 (quantity.value ()) + 459.67);}
00075 };
00076
00078
00080 template<template<typename, typename> class M, typename ST, typename SU,
00081 typename DQT, template<typename, typename> class SM, typename SST,
00082 typename SSU, typename SDQT>
00083 struct convertValue<M<Quantity<celsiusTemperature::Class, ST>,
00084 DerivedQuantity<celsiusTemperature::Class, SU, DQT> >,
00085 SM<Quantity<thermodynamicTemperature::Class, SST>,
00086 DerivedQuantity<thermodynamicTemperature::Class, SSU, SDQT> > >
00087 {
00088 static ST exec (const SM<Quantity<thermodynamicTemperature::Class, SST>,
00089 DerivedQuantity<thermodynamicTemperature::Class, SSU, SDQT> > & quantity)
00090 {return unit::Reverse<SU>::VAL (unit::Standard<SSU>::VAL
00091 (quantity.value ()) - 273.15);}
00092 };
00093
00095
00097 template<template<typename, typename> class M, typename ST, typename SU,
00098 typename DQT, template<typename, typename> class SM, typename SST,
00099 typename SSU, typename SDQT>
00100 struct convertValue<M<Quantity<celsiusTemperature::Class, ST>,
00101 DerivedQuantity<celsiusTemperature::Class, SU, DQT> >,
00102 SM<Quantity<fahrenheitTemperature::Class, SST>,
00103 DerivedQuantity<fahrenheitTemperature::Class, SSU, SDQT> > >
00104 {
00105 static ST exec (const SM<Quantity<fahrenheitTemperature::Class, SST>,
00106 DerivedQuantity<fahrenheitTemperature::Class, SSU, SDQT> > & quantity)
00107 {return unit::Reverse<SU>::VAL (5./9. * unit::Standard<SSU>::VAL
00108 (quantity.value ()) - 32.0);}
00109 };
00110
00112
00114 template<template<typename, typename> class M, typename ST, typename SU,
00115 typename DQT, template<typename, typename> class SM, typename SST,
00116 typename SSU, typename SDQT>
00117 struct convertValue<M<Quantity<fahrenheitTemperature::Class, ST>,
00118 DerivedQuantity<fahrenheitTemperature::Class, SU, DQT> >,
00119 SM<Quantity<thermodynamicTemperature::Class, SST>,
00120 DerivedQuantity<thermodynamicTemperature::Class, SSU, SDQT> > >
00121 {
00122 static ST exec (const SM<Quantity<thermodynamicTemperature::Class, SST>,
00123 DerivedQuantity<thermodynamicTemperature::Class, SSU, SDQT> > & quantity)
00124 {return unit::Reverse<SU>::VAL (9./5. * unit::Standard<SSU>::VAL
00125 (quantity.value ()) - 459.67);}
00126 };
00127
00129
00131 template<template<typename, typename> class M, typename ST, typename SU,
00132 typename DQT, template<typename, typename> class SM, typename SST,
00133 typename SSU, typename SDQT>
00134 struct convertValue<M<Quantity<fahrenheitTemperature::Class, ST>,
00135 DerivedQuantity<fahrenheitTemperature::Class, SU, DQT> >,
00136 SM<Quantity<celsiusTemperature::Class, SST>,
00137 DerivedQuantity<celsiusTemperature::Class, SSU, SDQT> > >
00138 {
00139 static ST exec (const SM<Quantity<celsiusTemperature::Class, SST>,
00140 DerivedQuantity<celsiusTemperature::Class, SSU, SDQT> > & quantity)
00141 {return unit::Reverse<SU>::VAL (9./5. * unit::Standard<SSU>::VAL
00142 (quantity.value ()) + 32.0);}
00143 };
00144
00146
00148
00149 }
00150
00151 #endif