1// tUnits.cpp 
2// 
3// Definitions of various units for length, time, and mass along with the SI multiplier prefixes. 
4// 
5// Copyright (c) 2017, 2020 Tristan Grimmer. 
6// Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby 
7// granted, provided that the above copyright notice and this permission notice appear in all copies. 
8// 
9// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL 
10// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, 
11// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN 
12// AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 
13// PERFORMANCE OF THIS SOFTWARE. 
14 
15#include "Foundation/tStandard.h" 
16#include "Foundation/tUnits.h" 
17 
18 
19namespace tUnit 
20{ 
21 const char* TimeUnitNames[int(tTime::NumTimeUnits)] = 
22 { 
23 "PlankTime", 
24 "Chronon", 
25 "Attosecond", 
26 "Femtosecond", 
27 "Picosecond", 
28 "Nanosecond", 
29 "Microsecond", 
30 "Millisecond", 
31 "Tick", 
32 "Second", 
33 "She", 
34 "Helek", 
35 "Minute", 
36 "Hour", 
37 "Day", 
38 "Week", 
39 "Fortnight", 
40 "Year", 
41 "Annum", 
42 "Century", 
43 "Millennium", 
44 "GalacticYear" 
45 }; 
46 
47 
48 const char* LengthUnitNames[int(tLength::NumLengthUnits)] = 
49 { 
50 "Angstrom", 
51 "Meter", 
52 "Kilometer", 
53 "Inch", 
54 "Foot", 
55 "Yard", 
56 "Fathom", 
57 "Mile", 
58 "NauticalMile", 
59 "AstronomicalUnit" 
60 }; 
61 
62 
63 const char* MassUnitNames[int(tMass::NumMassUnits)] = 
64 { 
65 "Gram", 
66 "Kilogram", 
67 "Slug" 
68 }; 
69} 
70 
71 
72const char* tUnit::GetUnitName(tTime timeUnit) 
73{ 
74 if (timeUnit == tTime::Unspecified) 
75 return nullptr; 
76 
77 return TimeUnitNames[int(timeUnit)]; 
78} 
79 
80 
81const char* tUnit::GetUnitName(tLength lengthUnit) 
82{ 
83 if (lengthUnit == tLength::Unspecified) 
84 return nullptr; 
85 
86 return LengthUnitNames[int(lengthUnit)]; 
87} 
88 
89 
90const char* tUnit::GetUnitName(tMass massUnit) 
91{ 
92 if (massUnit == tMass::Unspecified) 
93 return nullptr; 
94 
95 return MassUnitNames[int(massUnit)]; 
96} 
97 
98 
99tUnit::tTime tUnit::GetTimeUnit(const char* unitName) 
100{ 
101 for (int u = 0; u < int(tTime::NumTimeUnits); u++) 
102 { 
103 if (!tStd::tStricmp(unitName, TimeUnitNames[u])) 
104 return tTime(u); 
105 } 
106 
107 return tTime::Unspecified; 
108} 
109 
110 
111tUnit::tLength tUnit::GetLengthUnit(const char* unitName) 
112{ 
113 for (int u = 0; u < int(tLength::NumLengthUnits); u++) 
114 { 
115 if (!tStd::tStricmp(unitName, LengthUnitNames[u])) 
116 return tLength(u); 
117 } 
118 
119 return tLength::Unspecified; 
120} 
121 
122 
123tUnit::tMass tUnit::GetMassUnit(const char* unitName) 
124{ 
125 for (int u = 0; u < int(tMass::NumMassUnits); u++) 
126 { 
127 if (!tStd::tStricmp(unitName, MassUnitNames[u])) 
128 return tMass(u); 
129 } 
130 
131 return tMass::Unspecified; 
132} 
133