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=134 // 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  void scale(FXdouble mm){ m=mm; }
110  FXdouble scale() const { return m; }
111 
113  void offset(FXdouble aa){ a=aa; }
114  FXdouble offset() const { return a; }
115 
117  FXUnits& operator=(const FXUnits& org){m=org.m;a=org.a;return *this;}
118 
120  FXdouble operator()(FXdouble x) const { return x*m+a; }
121 
123  FXUnits invert() const { return FXUnits(1.0/m,-a/m); }
124 
126  static FXint lookup(const FXchar* unit);
127  static FXint lookup(const FXString& unit);
128 
130  static FXint span(const FXchar* unit);
131  static FXint span(const FXString& unit);
132 
134  static FXulong dimensions(const FXchar* unit);
135  static FXulong dimensions(const FXString& unit);
136 
138  static FXString canonical(FXulong dims);
139 
141  static FXString canonical(const FXchar* unit);
142  static FXString canonical(const FXString& unit);
143 
145  static FXUnits convertFromTo(const FXchar* srcUnit,const FXchar* dstUnit=nullptr);
146  static FXUnits convertFromTo(const FXString& srcUnit,const FXchar* dstUnit=nullptr);
147  static FXUnits convertFromTo(const FXchar* srcUnit,const FXString& dstUnit);
148  static FXUnits convertFromTo(const FXString& srcUnit,const FXString& dstUnit);
149 
151  static FXUnits convertToFrom(const FXchar* dstUnit,const FXchar* srcUnit=nullptr);
152  static FXUnits convertToFrom(const FXString& dstUnit,const FXchar* srcUnit=nullptr);
153  static FXUnits convertToFrom(const FXchar* dstUnit,const FXString& srcUnit);
154  static FXUnits convertToFrom(const FXString& dstUnit,const FXString& srcUnit);
155 
157  static FXUnits convertFromToDims(const FXchar* srcUnit,FXulong dims);
158  static FXUnits convertFromToDims(const FXString& srcUnit,FXulong dims);
159 
161  static FXUnits convertToFromDims(const FXchar* dstUnit,FXulong dims);
162  static FXUnits convertToFromDims(const FXString& dstUnit,FXulong dims);
163 
164  };
165 
166 }
167 
168 #endif
Unit conversion class.
Definition: FXUnits.h:54
FXUnits & operator=(const FXUnits &org)
Assign from other units.
Definition: FXUnits.h:117
void scale(FXdouble mm)
Access multiplicand.
Definition: FXUnits.h:109
FXdouble operator()(FXdouble x) const
Convert number x according to transformation.
Definition: FXUnits.h:120
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
void offset(FXdouble aa)
Access addend.
Definition: FXUnits.h:113
FXUnits invert() const
Return the transformation.
Definition: FXUnits.h:123
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