~scottydelicious666/brewtarget/brewtarget

« back to all changes in this revision

Viewing changes to unit.h

  • Committer: Philip Greggory Lee
  • Date: 2009-08-23 16:53:43 UTC
  • Revision ID: git-v1:f8d1a25135bd92f06c46c562293800e4faa42c61
Made a src/ and ui/ directory and moved everything.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * unit.h is part of Brewtarget, and is Copyright Philip G. Lee
3
 
 * (rocketman768@gmail.com), 2009.
4
 
 *
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.
9
 
 
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.
14
 
 
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/>.
17
 
 */
18
 
 
19
 
#ifndef _UNIT_H
20
 
#define _UNIT_H
21
 
 
22
 
class Unit;
23
 
class Units; // A container of instances.
24
 
class KilogramUnit;
25
 
class GramUnit;
26
 
class MilligramUnit;
27
 
class PoundUnit;
28
 
class OunceUnit;
29
 
class LiterUnit;
30
 
class MilliliterUnit;
31
 
class GallonUnit;
32
 
class QuartUnit;
33
 
class CupUnit;
34
 
class TablespoonUnit;
35
 
class TeaspoonUnit;
36
 
class SecondUnit;
37
 
class MinuteUnit;
38
 
class HourUnit;
39
 
class CelsiusUnit;
40
 
class FahrenheitUnit;
41
 
class KelvinUnit;
42
 
 
43
 
#include <QString>
44
 
#include <string>
45
 
#include <map>
46
 
 
47
 
// TODO: implement ppm, percent, diastatic power, ibuGalPerLb, gravity, srm, volumes.
48
 
 
49
 
class Unit
50
 
{
51
 
   public:
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; };
58
 
 
59
 
      static double convert( double amount, const std::string& fromUnit, const std::string& toUnit );
60
 
      static double qstringToSI( QString qstr );
61
 
 
62
 
   private:
63
 
      static std::map<std::string, Unit*> nameToUnit;
64
 
      static bool isMapSetup;
65
 
      static void setupMap();
66
 
};
67
 
 
68
 
// ================ Weight/Mass ================
69
 
class KilogramUnit : public Unit
70
 
{
71
 
   public:
72
 
      KilogramUnit();
73
 
 
74
 
      // Inherited methods.
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; }
79
 
 
80
 
   private:
81
 
      std::string unitName;
82
 
      std::string SIUnitName;
83
 
};
84
 
 
85
 
class GramUnit : public Unit
86
 
{
87
 
   public:
88
 
      GramUnit();
89
 
 
90
 
      // Inherited methods.
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; }
95
 
 
96
 
   private:
97
 
      std::string unitName;
98
 
      std::string SIUnitName;
99
 
};
100
 
 
101
 
class MilligramUnit : public Unit
102
 
{
103
 
   public:
104
 
      MilligramUnit();
105
 
 
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; }
111
 
 
112
 
   private:
113
 
      std::string unitName;
114
 
      std::string SIUnitName;
115
 
};
116
 
 
117
 
class PoundUnit : public Unit
118
 
{
119
 
   public:
120
 
      PoundUnit();
121
 
      
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; }
127
 
      
128
 
   private:
129
 
      std::string unitName;
130
 
      std::string SIUnitName;
131
 
};
132
 
 
133
 
class OunceUnit : public Unit
134
 
{
135
 
   public:
136
 
      OunceUnit();
137
 
 
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; }
143
 
 
144
 
   private:
145
 
      std::string unitName;
146
 
      std::string SIUnitName;
147
 
};
148
 
 
149
 
// ================ Volume ================
150
 
class LiterUnit : public Unit
151
 
{
152
 
   public:
153
 
      LiterUnit();
154
 
 
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; }
160
 
 
161
 
   private:
162
 
      std::string unitName;
163
 
      std::string SIUnitName;
164
 
};
165
 
 
166
 
class MilliliterUnit : public Unit
167
 
{
168
 
   public:
169
 
      MilliliterUnit();
170
 
 
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; }
176
 
 
177
 
   private:
178
 
      std::string unitName;
179
 
      std::string SIUnitName;
180
 
};
181
 
 
182
 
class GallonUnit : public Unit
183
 
{
184
 
   public:
185
 
      GallonUnit();
186
 
 
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; }
192
 
 
193
 
   private:
194
 
      std::string unitName;
195
 
      std::string SIUnitName;
196
 
};
197
 
 
198
 
class QuartUnit : public Unit
199
 
{
200
 
   public:
201
 
      QuartUnit();
202
 
 
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; }
208
 
 
209
 
   private:
210
 
      std::string unitName;
211
 
      std::string SIUnitName;
212
 
};
213
 
 
214
 
class CupUnit : public Unit
215
 
{
216
 
   public:
217
 
      CupUnit();
218
 
 
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; }
224
 
 
225
 
   private:
226
 
      std::string unitName;
227
 
      std::string SIUnitName;
228
 
};
229
 
 
230
 
class TablespoonUnit : public Unit
231
 
{
232
 
   public:
233
 
      TablespoonUnit();
234
 
 
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; }
240
 
 
241
 
   private:
242
 
      std::string unitName;
243
 
      std::string SIUnitName;
244
 
};
245
 
 
246
 
class TeaspoonUnit : public Unit
247
 
{
248
 
   public:
249
 
      TeaspoonUnit();
250
 
 
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; }
256
 
 
257
 
   private:
258
 
      std::string unitName;
259
 
      std::string SIUnitName;
260
 
};
261
 
 
262
 
// ================ Time ================
263
 
class SecondUnit : public Unit
264
 
{
265
 
   public:
266
 
      SecondUnit();
267
 
 
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; }
273
 
 
274
 
   private:
275
 
      std::string unitName;
276
 
      std::string SIUnitName;
277
 
};
278
 
 
279
 
class MinuteUnit : public Unit
280
 
{
281
 
   public:
282
 
      MinuteUnit();
283
 
      
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; }
289
 
      
290
 
   private:
291
 
      std::string unitName;
292
 
      std::string SIUnitName;
293
 
};
294
 
 
295
 
class HourUnit : public Unit
296
 
{
297
 
   public:
298
 
      HourUnit();
299
 
 
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; }
305
 
 
306
 
   private:
307
 
      std::string unitName;
308
 
      std::string SIUnitName;
309
 
};
310
 
 
311
 
// ================ Temperature ================
312
 
 
313
 
class CelsiusUnit : public Unit
314
 
{
315
 
   public:
316
 
      CelsiusUnit();
317
 
 
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; }
323
 
 
324
 
   private:
325
 
      std::string unitName;
326
 
      std::string SIUnitName;
327
 
};
328
 
 
329
 
class KelvinUnit : public Unit
330
 
{
331
 
   public:
332
 
      KelvinUnit();
333
 
 
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; }
339
 
 
340
 
   private:
341
 
      std::string unitName;
342
 
      std::string SIUnitName;
343
 
};
344
 
 
345
 
class FahrenheitUnit : public Unit
346
 
{
347
 
   public:
348
 
      FahrenheitUnit();
349
 
 
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; }
355
 
 
356
 
   private:
357
 
      std::string unitName;
358
 
      std::string SIUnitName;
359
 
};
360
 
 
361
 
class Units
362
 
{
363
 
public:
364
 
   Units();
365
 
 
366
 
   // === Mass ===
367
 
   static KilogramUnit *kilograms;
368
 
   static GramUnit *grams;
369
 
   static MilligramUnit *milligrams;
370
 
   static PoundUnit *pounds;
371
 
   static OunceUnit *ounces;
372
 
   // === Volume ===
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;
380
 
   // === Time ===
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;
388
 
};
389
 
 
390
 
#endif // _UNIT_H