Typica is a free program for professional coffee roasters. https://typica.us
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

units.cpp 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. /*253:*/
  2. #line 42 "./units.w"
  3. #include "units.h"
  4. /*:253*//*254:*/
  5. #line 52 "./units.w"
  6. bool Units::isTemperatureUnit(Unit unit)
  7. {
  8. return(unit==Fahrenheit||
  9. unit==Celsius||
  10. unit==Kelvin||
  11. unit==Rankine);
  12. }
  13. /*:254*//*255:*/
  14. #line 70 "./units.w"
  15. double Units::convertTemperature(double value,Unit fromUnit,Unit toUnit)
  16. {
  17. if(!(isTemperatureUnit(fromUnit)&&isTemperatureUnit(toUnit)))
  18. {
  19. return 0;
  20. }
  21. switch(fromUnit)
  22. {
  23. case Fahrenheit:
  24. switch(toUnit)
  25. {
  26. case Fahrenheit:
  27. return value;
  28. break;
  29. case Celsius:
  30. return(value-32.0)*5.0/9.0;
  31. break;
  32. case Kelvin:
  33. return(value+459.67)*5.0/9.0;
  34. break;
  35. case Rankine:
  36. return value+459.67;
  37. break;
  38. }
  39. break;
  40. case Celsius:
  41. switch(toUnit)
  42. {
  43. case Fahrenheit:
  44. return value*9.0/5.0+32.0;
  45. break;
  46. case Celsius:
  47. return value;
  48. break;
  49. case Kelvin:
  50. return value+273.15;
  51. break;
  52. case Rankine:
  53. return(value+273.15)*9.0/5.0;
  54. break;
  55. }
  56. break;
  57. case Kelvin:
  58. switch(toUnit)
  59. {
  60. case Fahrenheit:
  61. return value*5.0/9.0-459.67;
  62. break;
  63. case Celsius:
  64. return value-273.15;
  65. break;
  66. case Kelvin:
  67. return value;
  68. break;
  69. case Rankine:
  70. return value*9.0/5.0;
  71. break;
  72. }
  73. break;
  74. case Rankine:
  75. switch(toUnit)
  76. {
  77. case Fahrenheit:
  78. return value-457.67;
  79. break;
  80. case Celsius:
  81. return(value-491.67)*5.0/9.0;
  82. break;
  83. case Kelvin:
  84. return value*5.0/9.0;
  85. break;
  86. case Rankine:
  87. return value;
  88. break;
  89. }
  90. break;
  91. default:
  92. return 0;
  93. break;
  94. }
  95. return 0;
  96. }
  97. /*:255*//*256:*/
  98. #line 156 "./units.w"
  99. double Units::convertRelativeTemperature(double value,Unit fromUnit,Unit toUnit)
  100. {
  101. if(!(isTemperatureUnit(fromUnit)&&isTemperatureUnit(toUnit)))
  102. {
  103. return 0;
  104. }
  105. switch(fromUnit)
  106. {
  107. case Fahrenheit:
  108. switch(toUnit)
  109. {
  110. case Fahrenheit:
  111. return value;
  112. break;
  113. case Celsius:
  114. return value*(5.0/9.0);
  115. break;
  116. case Kelvin:
  117. return value*(5.0/9.0);
  118. break;
  119. case Rankine:
  120. return value;
  121. break;
  122. default:
  123. return 0;
  124. break;
  125. }
  126. break;
  127. case Celsius:
  128. switch(toUnit)
  129. {
  130. case Fahrenheit:
  131. return value*(9.0/5.0);
  132. break;
  133. case Celsius:
  134. return value;
  135. break;
  136. case Kelvin:
  137. return value;
  138. break;
  139. case Rankine:
  140. return value*(9.0/5.0);
  141. break;
  142. default:
  143. return 0;
  144. break;
  145. }
  146. break;
  147. case Kelvin:
  148. switch(toUnit)
  149. {
  150. case Fahrenheit:
  151. return value*(5.0/9.0);
  152. break;
  153. case Celsius:
  154. return value;
  155. break;
  156. case Kelvin:
  157. return value;
  158. break;
  159. case Rankine:
  160. return value*(9.0/5.0);
  161. break;
  162. default:
  163. return 0;
  164. break;
  165. }
  166. break;
  167. case Rankine:
  168. switch(toUnit)
  169. {
  170. case Fahrenheit:
  171. return value;
  172. break;
  173. case Celsius:
  174. return value*(5.0/9.0);
  175. break;
  176. case Kelvin:
  177. return value*(5.0/9.0);
  178. break;
  179. case Rankine:
  180. return value;
  181. break;
  182. default:
  183. return 0;
  184. break;
  185. }
  186. break;
  187. default:
  188. return 0;
  189. break;
  190. }
  191. return 0;
  192. }
  193. /*:256*//*257:*/
  194. #line 254 "./units.w"
  195. double Units::convertWeight(double value,Unit fromUnit,Unit toUnit)
  196. {
  197. if(isWeightUnit(fromUnit)&&isWeightUnit(toUnit))
  198. {
  199. switch(fromUnit)
  200. {
  201. case Pound:
  202. switch(toUnit)
  203. {
  204. case Pound:
  205. return value;
  206. break;
  207. case Kilogram:
  208. return value/2.2;
  209. break;
  210. case Ounce:
  211. return value*16.0;
  212. break;
  213. case Gram:
  214. return value/0.0022;
  215. break;
  216. default:
  217. return 0;
  218. break;
  219. }
  220. break;
  221. case Kilogram:
  222. switch(toUnit)
  223. {
  224. case Pound:
  225. return value*2.2;
  226. break;
  227. case Kilogram:
  228. return value;
  229. break;
  230. case Ounce:
  231. return value*35.2;
  232. break;
  233. case Gram:
  234. return value*1000.0;
  235. break;
  236. default:
  237. return 0;
  238. break;
  239. }
  240. break;
  241. case Ounce:
  242. switch(toUnit)
  243. {
  244. case Pound:
  245. return value/16.0;
  246. break;
  247. case Kilogram:
  248. return value/35.2;
  249. break;
  250. case Ounce:
  251. return value;
  252. break;
  253. case Gram:
  254. return value/0.0352;
  255. break;
  256. default:
  257. return 0;
  258. break;
  259. }
  260. break;
  261. case Gram:
  262. switch(toUnit)
  263. {
  264. case Pound:
  265. return value*0.0022;
  266. break;
  267. case Kilogram:
  268. return value/1000.0;
  269. break;
  270. case Ounce:
  271. return value*0.0352;
  272. break;
  273. case Gram:
  274. return value;
  275. break;
  276. default:
  277. return 0;
  278. break;
  279. }
  280. break;
  281. default:
  282. return 0;
  283. break;
  284. }
  285. }
  286. return 0;
  287. }
  288. bool Units::isWeightUnit(Unit unit)
  289. {
  290. return(unit==Pound||
  291. unit==Kilogram||
  292. unit==Ounce||
  293. unit==Gram);
  294. }
  295. /*:257*/