Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members

FXUnits.h
1 /********************************************************************************
2 * *
3 * U n i t - C o n v e r s i o n s *
4 * *
5 *********************************************************************************
6 * Copyright (C) 2026 by Jeroen van der Zijp. All Rights Reserved. *
7 *********************************************************************************
8 * This library is free software; you can redistribute it and/or modify *
9 * it under the terms of the GNU Lesser General Public License as published by *
10 * the Free Software Foundation; either version 3 of the License, or *
11 * (at your option) any later version. *
12 * *
13 * This library is distributed in the hope that it will be useful, *
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
16 * GNU Lesser General Public License for more details. *
17 * *
18 * You should have received a copy of the GNU Lesser General Public License *
19 * along with this program. If not, see <http://www.gnu.org/licenses/> *
20 ********************************************************************************/
21 #ifndef FXUNITS_H
22 #define FXUNITS_H
23 
24 namespace FX {
25 
26 
54 class FXAPI FXUnits {
55 private:
56  FXdouble m; // Scale
57  FXdouble a; // Offset
58 public:
59  enum {
60  GRAM, // Mass
61  METER, // Length
62  AMPERE, // Current
63  CANDELA, // Luminous flux
64  MOLE, // Mole
65  RADIAN, // Angles
66  STERADIAN, // Solid angles
67  SECOND, // Time
68  KELVIN, // Temperature / Kelvin
69  CELSIUS, // Temperature / Celsius
70  FAHRENHEIT, // Temperature / Fahrenheit
71  RANKINE, // Temperature / Rankine
72  };
73  enum {
74  NumUnits=133 // Total number of units
75  };
76 public:
77 
79  static const FXchar symbol[NumUnits][8];
80 
82  static const FXdouble factor[NumUnits];
83 
86  static const FXchar expression[NumUnits][16];
87 private:
88  struct Conv;
89  static const char* divex(const FXchar* unit,Conv& u);
90  static const FXchar* unitex(const FXchar* unit,Conv& u);
91  static const FXchar* scalex(const FXchar* unit,Conv& u);
92  static const FXchar* powex(const FXchar* unit,Conv& u);
93  static const FXchar* mulex(const FXchar* unit,Conv& u);
94 public:
95 
97  FXUnits():m(1.0),a(0.0){ }
98 
100  FXUnits(FXdouble mm,FXdouble aa=0.0):m(mm),a(aa){ }
101 
103  FXUnits(const FXUnits& org):m(org.m),a(org.a){ }
104 
106  operator FXbool() const { return (m || a); }
107 
109  FXUnits& operator=(const FXUnits& org){m=org.m;a=org.a;return *this;}
110 
112  FXdouble operator()(FXdouble x) const { return x*m+a; }
113 
115  FXUnits invert() const { return FXUnits(1.0/m,-a/m); }
116 
118  static FXint lookup(const FXchar* unit);
119  static FXint lookup(const FXString& unit);
120 
122  static FXint span(const FXchar* unit);
123  static FXint span(const FXString& unit);
124 
126  static FXulong dimensions(const FXchar* unit);
127  static FXulong dimensions(const FXString& unit);
128 
130  static FXString canonical(FXulong dims);
131 
133  static FXUnits convertFromTo(const FXchar* srcUnit,const FXchar* dstUnit=nullptr);
134  static FXUnits convertFromTo(const FXString& srcUnit,const FXchar* dstUnit=nullptr);
135  static FXUnits convertFromTo(const FXchar* srcUnit,const FXString& dstUnit);
136  static FXUnits convertFromTo(const FXString& srcUnit,const FXString& dstUnit);
137 
139  static FXUnits convertToFrom(const FXchar* dstUnit,const FXchar* srcUnit=nullptr);
140  static FXUnits convertToFrom(const FXString& dstUnit,const FXchar* srcUnit=nullptr);
141  static FXUnits convertToFrom(const FXchar* dstUnit,const FXString& srcUnit);
142  static FXUnits convertToFrom(const FXString& dstUnit,const FXString& srcUnit);
143 
145  static FXUnits convertFromToDims(const FXchar* srcUnit,FXulong dims);
146  static FXUnits convertFromToDims(const FXString& srcUnit,FXulong dims);
147 
149  static FXUnits convertToFromDims(const FXchar* dstUnit,FXulong dims);
150  static FXUnits convertToFromDims(const FXString& dstUnit,FXulong dims);
151 
152  };
153 
154 }
155 
156 #endif
Unit conversion class.
Definition: FXUnits.h:54
FXUnits & operator=(const FXUnits &org)
Assign from other units.
Definition: FXUnits.h:109
FXdouble operator()(FXdouble x) const
Convert number x according to transformation.
Definition: FXUnits.h:112
FXUnits(FXdouble mm, FXdouble aa=0.0)
Initialize only with scale.
Definition: FXUnits.h:100
FXUnits(const FXUnits &org)
Copy from other units.
Definition: FXUnits.h:103
Definition: FX4Splitter.h:28
FXUnits invert() const
Return the transformation.
Definition: FXUnits.h:115
FXUnits()
Initialize to identity.
Definition: FXUnits.h:97
FXString provides essential string manipulation capabilities in FOX.
Definition: FXString.h:42

Copyright © 1997-2026 Jeroen van der Zijp