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 "PhysicalQuantities/ThermodynamicTemperature.h"
00034 #include "PhysicalQuantities/CelsiusTemperature.h"
00035 #include "PhysicalQuantities/FahrenheitTemperature.h"
00036
00037 namespace quantity {
00038
00040
00042
00044
00046 template<template<typename, typename> class M, typename ST, typename SU, typename DQT,
00047 template<typename, typename> class SM, typename SST, typename SSU, typename SDQT>
00048 struct convertValue<M<Quantity<thermodynamicTemperature::Class, ST>,
00049 DerivedQuantity<thermodynamicTemperature::Class, SU, DQT> >,
00050 SM<Quantity<celsiusTemperature::Class, SST>,
00051 DerivedQuantity<celsiusTemperature::Class, SSU, SDQT> > >
00052 {
00053 static ST exec (const SM<Quantity<celsiusTemperature::Class, SST>,
00054 DerivedQuantity<celsiusTemperature::Class, SSU, SDQT> > & quantity)
00055 {return Reverse<SU, ST>::VAL (Standardize<SSU, SST>::VAL (quantity.value ()) + 273.15);}
00056 };
00057
00059
00061 template<template<typename, typename> class M, typename ST, typename SU, typename DQT,
00062 template<typename, typename> class SM, typename SST, typename SSU, typename SDQT>
00063 struct convertValue<M<Quantity<thermodynamicTemperature::Class, ST>,
00064 DerivedQuantity<thermodynamicTemperature::Class, SU, DQT> >,
00065 SM<Quantity<fahrenheitTemperature::Class, SST>,
00066 DerivedQuantity<fahrenheitTemperature::Class, SSU, SDQT> > >
00067 {
00068 static ST exec (const SM<Quantity<fahrenheitTemperature::Class, SST>,
00069 DerivedQuantity<fahrenheitTemperature::Class, SSU, SDQT> > & quantity)
00070 {return Reverse<SU, ST>::VAL (5./9. * Standardize<SSU, SST>::VAL (quantity.value ()) + 459.67);}
00071 };
00072
00074
00076 template<template<typename, typename> class M, typename ST, typename SU, typename DQT,
00077 template<typename, typename> class SM, typename SST, typename SSU, typename SDQT>
00078 struct convertValue<M<Quantity<celsiusTemperature::Class, ST>,
00079 DerivedQuantity<celsiusTemperature::Class, SU, DQT> >,
00080 SM<Quantity<thermodynamicTemperature::Class, SST>,
00081 DerivedQuantity<thermodynamicTemperature::Class, SSU, SDQT> > >
00082 {
00083 static ST exec (const SM<Quantity<thermodynamicTemperature::Class, SST>,
00084 DerivedQuantity<thermodynamicTemperature::Class, SSU, SDQT> > & quantity)
00085 {return Reverse<SU, ST>::VAL (Standardize<SSU, SST>::VAL (quantity.value ()) - 273.15);}
00086 };
00087
00089
00091 template<template<typename, typename> class M, typename ST, typename SU, typename DQT,
00092 template<typename, typename> class SM, typename SST, typename SSU, typename SDQT>
00093 struct convertValue<M<Quantity<celsiusTemperature::Class, ST>,
00094 DerivedQuantity<celsiusTemperature::Class, SU, DQT> >,
00095 SM<Quantity<fahrenheitTemperature::Class, SST>,
00096 DerivedQuantity<fahrenheitTemperature::Class, SSU, SDQT> > >
00097 {
00098 static ST exec (const SM<Quantity<fahrenheitTemperature::Class, SST>,
00099 DerivedQuantity<fahrenheitTemperature::Class, SSU, SDQT> > & quantity)
00100 {return Reverse<SU, ST>::VAL (5./9. * Standardize<SSU, SST>::VAL (quantity.value ()) - 32.0);}
00101 };
00102
00104
00106 template<template<typename, typename> class M, typename ST, typename SU, typename DQT,
00107 template<typename, typename> class SM, typename SST, typename SSU, typename SDQT>
00108 struct convertValue<M<Quantity<fahrenheitTemperature::Class, ST>,
00109 DerivedQuantity<fahrenheitTemperature::Class, SU, DQT> >,
00110 SM<Quantity<thermodynamicTemperature::Class, SST>,
00111 DerivedQuantity<thermodynamicTemperature::Class, SSU, SDQT> > >
00112 {
00113 static ST exec (const SM<Quantity<thermodynamicTemperature::Class, SST>,
00114 DerivedQuantity<thermodynamicTemperature::Class, SSU, SDQT> > & quantity)
00115 {return Reverse<SU, ST>::VAL (9./5. * Standardize<SSU, SST>::VAL (quantity.value ()) - 459.67);}
00116 };
00117
00119
00121 template<template<typename, typename> class M, typename ST, typename SU, typename DQT,
00122 template<typename, typename> class SM, typename SST, typename SSU, typename SDQT>
00123 struct convertValue<M<Quantity<fahrenheitTemperature::Class, ST>,
00124 DerivedQuantity<fahrenheitTemperature::Class, SU, DQT> >,
00125 SM<Quantity<celsiusTemperature::Class, SST>,
00126 DerivedQuantity<celsiusTemperature::Class, SSU, SDQT> > >
00127 {
00128 static ST exec (const SM<Quantity<celsiusTemperature::Class, SST>,
00129 DerivedQuantity<celsiusTemperature::Class, SSU, SDQT> > & quantity)
00130 {return Reverse<SU, ST>::VAL (9./5. * Standardize<SSU, SST>::VAL (quantity.value ()) + 32.0);}
00131 };
00132
00134
00136
00137 }
00138
00139 #endif