2
* unit.h is part of Brewtarget, and is Copyright Philip G. Lee
3
* (rocketman768@gmail.com), 2009.
5
* Brewtarget is free software: you can redistribute it and/or modify
6
* it under the terms of the GNU General Public License as published by
7
* the Free Software Foundation, either version 3 of the License, or
8
* (at your option) any later version.
10
* Brewtarget is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
15
* You should have received a copy of the GNU General Public License
16
* along with this program. If not, see <http://www.gnu.org/licenses/>.
23
class Units; // A container of instances.
47
// TODO: implement ppm, percent, diastatic power, ibuGalPerLb, gravity, srm, volumes.
52
// Seems these can't be PURE virtuals b/c of some issue with std::map.
53
virtual double toSI( double amt ) const { return amt; };
54
virtual double fromSI( double amt ) const { return amt; };
55
// The unit name will be the singular of the commonly used abbreviation.
56
virtual const std::string& getUnitName() const { return 0; };
57
virtual const std::string& getSIUnitName() const { return 0; };
59
static double convert( double amount, const std::string& fromUnit, const std::string& toUnit );
60
static double qstringToSI( QString qstr );
63
static std::map<std::string, Unit*> nameToUnit;
64
static bool isMapSetup;
65
static void setupMap();
68
// ================ Weight/Mass ================
69
class KilogramUnit : public Unit
75
double toSI( double amt ) const;
76
double fromSI( double amt ) const;
77
const std::string& getUnitName() const { return unitName; }
78
const std::string& getSIUnitName() const { return SIUnitName; }
82
std::string SIUnitName;
85
class GramUnit : public Unit
91
double toSI( double amt ) const;
92
double fromSI( double amt ) const;
93
const std::string& getUnitName() const { return unitName; }
94
const std::string& getSIUnitName() const { return SIUnitName; }
98
std::string SIUnitName;
101
class MilligramUnit : public Unit
106
// Inherited methods.
107
double toSI( double amt ) const;
108
double fromSI( double amt ) const;
109
const std::string& getUnitName() const { return unitName; }
110
const std::string& getSIUnitName() const { return SIUnitName; }
113
std::string unitName;
114
std::string SIUnitName;
117
class PoundUnit : public Unit
122
// Inherited methods.
123
double toSI( double amt ) const;
124
double fromSI( double amt ) const;
125
const std::string& getUnitName() const { return unitName; }
126
const std::string& getSIUnitName() const { return SIUnitName; }
129
std::string unitName;
130
std::string SIUnitName;
133
class OunceUnit : public Unit
138
// Inherited methods.
139
double toSI( double amt ) const;
140
double fromSI( double amt ) const;
141
const std::string& getUnitName() const { return unitName; }
142
const std::string& getSIUnitName() const { return SIUnitName; }
145
std::string unitName;
146
std::string SIUnitName;
149
// ================ Volume ================
150
class LiterUnit : public Unit
155
// Inherited methods.
156
double toSI( double amt ) const;
157
double fromSI( double amt ) const;
158
const std::string& getUnitName() const { return unitName; }
159
const std::string& getSIUnitName() const { return SIUnitName; }
162
std::string unitName;
163
std::string SIUnitName;
166
class MilliliterUnit : public Unit
171
// Inherited methods.
172
double toSI( double amt ) const;
173
double fromSI( double amt ) const;
174
const std::string& getUnitName() const { return unitName; }
175
const std::string& getSIUnitName() const { return SIUnitName; }
178
std::string unitName;
179
std::string SIUnitName;
182
class GallonUnit : public Unit
187
// Inherited methods.
188
double toSI( double amt ) const;
189
double fromSI( double amt ) const;
190
const std::string& getUnitName() const { return unitName; }
191
const std::string& getSIUnitName() const { return SIUnitName; }
194
std::string unitName;
195
std::string SIUnitName;
198
class QuartUnit : public Unit
203
// Inherited methods.
204
double toSI( double amt ) const;
205
double fromSI( double amt ) const;
206
const std::string& getUnitName() const { return unitName; }
207
const std::string& getSIUnitName() const { return SIUnitName; }
210
std::string unitName;
211
std::string SIUnitName;
214
class CupUnit : public Unit
219
// Inherited methods.
220
double toSI( double amt ) const;
221
double fromSI( double amt ) const;
222
const std::string& getUnitName() const { return unitName; }
223
const std::string& getSIUnitName() const { return SIUnitName; }
226
std::string unitName;
227
std::string SIUnitName;
230
class TablespoonUnit : public Unit
235
// Inherited methods.
236
double toSI( double amt ) const;
237
double fromSI( double amt ) const;
238
const std::string& getUnitName() const { return unitName; }
239
const std::string& getSIUnitName() const { return SIUnitName; }
242
std::string unitName;
243
std::string SIUnitName;
246
class TeaspoonUnit : public Unit
251
// Inherited methods.
252
double toSI( double amt ) const;
253
double fromSI( double amt ) const;
254
const std::string& getUnitName() const { return unitName; }
255
const std::string& getSIUnitName() const { return SIUnitName; }
258
std::string unitName;
259
std::string SIUnitName;
262
// ================ Time ================
263
class SecondUnit : public Unit
268
// Inherited methods.
269
double toSI( double amt ) const;
270
double fromSI( double amt ) const;
271
const std::string& getUnitName() const { return unitName; }
272
const std::string& getSIUnitName() const { return SIUnitName; }
275
std::string unitName;
276
std::string SIUnitName;
279
class MinuteUnit : public Unit
284
// Inherited methods.
285
double toSI( double amt ) const;
286
double fromSI( double amt ) const;
287
const std::string& getUnitName() const { return unitName; }
288
const std::string& getSIUnitName() const { return SIUnitName; }
291
std::string unitName;
292
std::string SIUnitName;
295
class HourUnit : public Unit
300
// Inherited methods.
301
double toSI( double amt ) const;
302
double fromSI( double amt ) const;
303
const std::string& getUnitName() const { return unitName; }
304
const std::string& getSIUnitName() const { return SIUnitName; }
307
std::string unitName;
308
std::string SIUnitName;
311
// ================ Temperature ================
313
class CelsiusUnit : public Unit
318
// Inherited methods.
319
double toSI( double amt ) const;
320
double fromSI( double amt ) const;
321
const std::string& getUnitName() const { return unitName; }
322
const std::string& getSIUnitName() const { return SIUnitName; }
325
std::string unitName;
326
std::string SIUnitName;
329
class KelvinUnit : public Unit
334
// Inherited methods.
335
double toSI( double amt ) const;
336
double fromSI( double amt ) const;
337
const std::string& getUnitName() const { return unitName; }
338
const std::string& getSIUnitName() const { return SIUnitName; }
341
std::string unitName;
342
std::string SIUnitName;
345
class FahrenheitUnit : public Unit
350
// Inherited methods.
351
double toSI( double amt ) const;
352
double fromSI( double amt ) const;
353
const std::string& getUnitName() const { return unitName; }
354
const std::string& getSIUnitName() const { return SIUnitName; }
357
std::string unitName;
358
std::string SIUnitName;
367
static KilogramUnit *kilograms;
368
static GramUnit *grams;
369
static MilligramUnit *milligrams;
370
static PoundUnit *pounds;
371
static OunceUnit *ounces;
373
static LiterUnit *liters;
374
static MilliliterUnit *milliliters;
375
static GallonUnit *gallons;
376
static QuartUnit *quarts;
377
static CupUnit *cups;
378
static TablespoonUnit *tablespoons;
379
static TeaspoonUnit *teaspoons;
381
static SecondUnit *seconds;
382
static MinuteUnit *minutes;
383
static HourUnit *hours;
384
// === Temperature ===
385
static CelsiusUnit *celsius;
386
static FahrenheitUnit *fahrenheit;
387
static KelvinUnit *kelvin;