icedb  version 0.5.1
Snow particle scattering database API
Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
icedb::units::implementations::simpleUnits Struct Reference

#include <unitsBackend.hpp>

Inheritance diagram for icedb::units::implementations::simpleUnits:
Inheritance graph
[legend]
Collaboration diagram for icedb::units::implementations::simpleUnits:
Collaboration graph
[legend]

Public Member Functions

 simpleUnits (const std::string &in, const std::string &out, bool init=true)
 
bool validLength (const std::string &_inUnits, const std::string &_outUnits)
 
bool validFreq (const std::string &_inUnits, const std::string &_outUnits)
 
bool validVol (const std::string &_inUnits, const std::string &_outUnits)
 
bool validPres (const std::string &in, const std::string &out)
 
bool validMass (const std::string &in, const std::string &out)
 
bool validTemp (const std::string &in, const std::string &out)
 
bool validDens (const std::string &in, const std::string &out)
 
virtual ~simpleUnits ()
 
virtual bool isValid () const
 
double convert (double inVal) const
 
- Public Member Functions inherited from icedb::units::implementations::Unithandler
virtual ~Unithandler ()
 

Static Public Member Functions

static bool canConvert (Converter_registry_provider::optsType opts)
 
static std::shared_ptr< const UnithandlerconstructConverter (Converter_registry_provider::optsType opts)
 

Public Attributes

double _inOffset
 
double _outOffset
 
double _convFactor
 
std::string _inUnits
 
std::string _outUnits
 
bool _valid
 

Additional Inherited Members

- Protected Member Functions inherited from icedb::units::implementations::Unithandler
 Unithandler (const char *id)
 
- Protected Attributes inherited from icedb::units::implementations::Unithandler
const char * id
 

Detailed Description

Definition at line 15 of file unitsBackend.hpp.

Constructor & Destructor Documentation

◆ simpleUnits()

icedb::units::implementations::simpleUnits::simpleUnits ( const std::string &  in,
const std::string &  out,
bool  init = true 
)

Definition at line 24 of file unitsSimple.cpp.

References _valid, validDens(), validFreq(), validLength(), validMass(), validPres(), validTemp(), and validVol().

Referenced by constructConverter(), and icedb::units::implementations::spectralUnits::constructConverter().

24  :
25  Unithandler("simple"),
26  _inOffset(0), _outOffset(0), _convFactor(1),
27  _inUnits(in), _outUnits(out), _valid(true)
28  {
29  if (!init) return;
30  if (validLength(in, out)) return;
31  if (validFreq(in, out)) return;
32  if (validVol(in, out)) return;
33  if (validPres(in, out)) return;
34  if (validMass(in, out)) return;
35  if (validTemp(in, out)) return;
36  if (validDens(in, out)) return;
37 
38  _valid = false;
39  }
bool validMass(const std::string &in, const std::string &out)
bool validPres(const std::string &in, const std::string &out)
bool validLength(const std::string &_inUnits, const std::string &_outUnits)
Definition: unitsSimple.cpp:40
bool validTemp(const std::string &in, const std::string &out)
bool validFreq(const std::string &_inUnits, const std::string &_outUnits)
Definition: unitsSimple.cpp:65
bool validVol(const std::string &_inUnits, const std::string &_outUnits)
Definition: unitsSimple.cpp:80
bool validDens(const std::string &in, const std::string &out)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ~simpleUnits()

icedb::units::implementations::simpleUnits::~simpleUnits ( )
virtual

Definition at line 162 of file unitsSimple.cpp.

162 {}

Member Function Documentation

◆ canConvert()

bool icedb::units::implementations::simpleUnits::canConvert ( Converter_registry_provider::optsType  opts)
static

Definition at line 10 of file unitsSimple.cpp.

Referenced by icedb::units::implementations::_init().

10  {
11  const std::string in = opts->getVal<std::string>("inUnits");
12  const std::string out = opts->getVal<std::string>("outUnits");
13  simpleUnits test(in, out);
14  if (test._valid) return true;
15  return false;
16  }
simpleUnits(const std::string &in, const std::string &out, bool init=true)
Definition: unitsSimple.cpp:24
Here is the caller graph for this function:

◆ constructConverter()

std::shared_ptr< const implementations::Unithandler > icedb::units::implementations::simpleUnits::constructConverter ( Converter_registry_provider::optsType  opts)
static

Definition at line 17 of file unitsSimple.cpp.

References simpleUnits().

Referenced by icedb::units::implementations::_init().

18  {
19  const std::string in = opts->getVal<std::string>("inUnits");
20  const std::string out = opts->getVal<std::string>("outUnits");
21  std::shared_ptr<simpleUnits> res(new simpleUnits(in, out, true));
22  return res;
23  }
simpleUnits(const std::string &in, const std::string &out, bool init=true)
Definition: unitsSimple.cpp:24
Here is the call graph for this function:
Here is the caller graph for this function:

◆ convert()

double icedb::units::implementations::simpleUnits::convert ( double  inVal) const
virtual

Implements icedb::units::implementations::Unithandler.

Definition at line 164 of file unitsSimple.cpp.

References _convFactor, _inOffset, _outOffset, and _valid.

165  {
166  if (_valid) return ((inVal + _inOffset) * _convFactor) + (_outOffset);
167  throw;
168  //ICEDB_throw(scatdb::ICEDB_LOG_ERROR::ICEDB_LOG_ERROR_types::xBadInput)
169  // .add<std::string>("Reason", "Trying to convert with bad converter units.")
170  // ;
171  return 0;
172  }

◆ isValid()

bool icedb::units::implementations::simpleUnits::isValid ( ) const
virtual

Implements icedb::units::implementations::Unithandler.

Definition at line 163 of file unitsSimple.cpp.

References _valid.

◆ validDens()

bool icedb::units::implementations::simpleUnits::validDens ( const std::string &  in,
const std::string &  out 
)

Definition at line 147 of file unitsSimple.cpp.

References _convFactor.

Referenced by simpleUnits().

147  {
148  _convFactor = 1.f;
149  // Handling only number density here
150  // TODO: do other types of conversions
151  // Most further stuff requires knowledge of R, thus knowledge of
152  // relative humidity
153  bool inV = false, outV = false;
154  if (in == "m^-3") inV = true;
155  if (in == "cm^-3") { inV = true; _convFactor *= 1e6; }
156  if (out == "cm^-3") { outV = true; _convFactor /= 1e6; }
157  if (out == "m^-3") outV = true;
158  if (inV && outV) { return true; }
159  if (in == "ppmv" && out == "ppmv") { return true; } // ppmv identity
160  return false;
161  }
Here is the caller graph for this function:

◆ validFreq()

bool icedb::units::implementations::simpleUnits::validFreq ( const std::string &  _inUnits,
const std::string &  _outUnits 
)

Definition at line 65 of file unitsSimple.cpp.

References _convFactor.

Referenced by simpleUnits().

65  {
66  bool inV = false, outV = false;
67  _convFactor = 1.f;
68  if (_inUnits == "GHz") { _convFactor *= 1e9; inV = true; }
69  if (_inUnits == "MHz") { _convFactor *= 1e6; inV = true; }
70  if (_inUnits == "KHz") { _convFactor *= 1e3; inV = true; }
71  if (_inUnits == "Hz" || _inUnits == "s^-1" || _inUnits == "1/s") inV = true;
72  if (_outUnits == "GHz") { _convFactor /= 1e9; outV = true; }
73  if (_outUnits == "MHz") { _convFactor /= 1e6; outV = true; }
74  if (_outUnits == "KHz") { _convFactor /= 1e3; outV = true; }
75  if (_outUnits == "Hz" || _outUnits == "s^-1" || _outUnits == "1/s") outV = true;
76 
77  if (inV && outV) { return true; }
78  return false;
79  }
Here is the caller graph for this function:

◆ validLength()

bool icedb::units::implementations::simpleUnits::validLength ( const std::string &  _inUnits,
const std::string &  _outUnits 
)

Definition at line 40 of file unitsSimple.cpp.

References _convFactor.

Referenced by simpleUnits().

40  {
41  bool inV = false, outV = false;
42  _convFactor = 1.f;
43  if (_inUnits == "nm") { _convFactor /= 1e9; inV = true; }
44  if (_inUnits == "um" || _inUnits == "microns" || _inUnits == "micrometers")
45  {
46  _convFactor /= 1e6; inV = true;
47  }
48  if (_inUnits == "mm") { _convFactor /= 1e3; inV = true; }
49  if (_inUnits == "cm") { _convFactor *= 0.01; inV = true; }
50  if (_inUnits == "km") { _convFactor *= 1000.; inV = true; }
51  if (_inUnits == "m") inV = true;
52  if (_outUnits == "nm") { _convFactor *= 1e9; outV = true; }
53  if (_outUnits == "um" || _outUnits == "microns" || _outUnits == "micrometers")
54  {
55  _convFactor *= 1e6; outV = true;
56  }
57  if (_outUnits == "mm") { _convFactor *= 1e3; outV = true; }
58  if (_outUnits == "cm") { _convFactor *= 100.; outV = true; }
59  if (_outUnits == "km") { _convFactor /= 1000.; outV = true; }
60  if (_outUnits == "m") outV = true;
61 
62  if (inV && outV) { return true; }
63  return false;
64  }
Here is the caller graph for this function:

◆ validMass()

bool icedb::units::implementations::simpleUnits::validMass ( const std::string &  in,
const std::string &  out 
)

Definition at line 118 of file unitsSimple.cpp.

References _convFactor.

Referenced by simpleUnits().

118  {
119  bool inV = false, outV = false;
120  _convFactor = 1.f;
121  if (in == "ug") { _convFactor /= 1e9; inV = true; }
122  if (in == "mg") { _convFactor /= 1e6; inV = true; }
123  if (in == "g") { _convFactor /= 1e3; inV = true; }
124  if (in == "kg") inV = true;
125  if (out == "ug") { _convFactor *= 1e9; outV = true; }
126  if (out == "mg") { _convFactor *= 1e6; outV = true; }
127  if (out == "g") { _convFactor *= 1e3; outV = true; }
128  if (out == "kg") outV = true;
129  if (inV && outV) { return true; }
130  return false;
131  }
Here is the caller graph for this function:

◆ validPres()

bool icedb::units::implementations::simpleUnits::validPres ( const std::string &  in,
const std::string &  out 
)

Definition at line 103 of file unitsSimple.cpp.

References _convFactor.

Referenced by simpleUnits().

103  {
104  bool inV = false, outV = false;
105  _convFactor = 1.f;
106  if (in == "mb" || in == "millibar") { _convFactor *= 100; inV = true; }
107  if (in == "hPa") { _convFactor *= 100; inV = true; }
108  if (in == "Pa") inV = true;
109  if (in == "kPa") { _convFactor *= 1000; inV = true; }
110  if (in == "bar") { _convFactor *= 100000; inV = true; }
111  if (out == "mb" || out == "millibar" || out == "hPa") { _convFactor /= 100; outV = true; }
112  if (out == "bar") { _convFactor /= 100000; outV = true; }
113  if (out == "Pa") outV = true;
114  if (out == "kPa") { _convFactor /= 1000; outV = true; }
115  if (inV && outV) { return true; }
116  return false;
117  }
Here is the caller graph for this function:

◆ validTemp()

bool icedb::units::implementations::simpleUnits::validTemp ( const std::string &  in,
const std::string &  out 
)

Definition at line 132 of file unitsSimple.cpp.

References _convFactor, _inOffset, and _outOffset.

Referenced by simpleUnits().

132  {
133  _convFactor = 1.f;
134  bool inV = false, outV = false;
135  // K - Kelvin, C - Celsius, F - Fahrenheit, R - Rankine
136  if (in == "K" || in == "degK") inV = true;
137  if (in == "C" || in == "degC") { inV = true; _inOffset += 273.15; }
138  if (in == "F" || in == "degF") { inV = true; _convFactor *= 5. / 9.; _inOffset += 459.67; }
139  if (in == "R" || in == "degR") { inV = true; _convFactor *= 5. / 9; }
140  if (out == "K" || out == "degK") outV = true;
141  if (out == "C" || out == "degC") { outV = true; _outOffset -= 273.15; }
142  if (out == "F" || out == "degF") { outV = true; _convFactor *= 9. / 5.; _outOffset -= 459.67; }
143  if (out == "R" || out == "degR") { outV = true; _convFactor *= 9. / 5.; }
144  if (inV && outV) { return true; }
145  return false;
146  }
Here is the caller graph for this function:

◆ validVol()

bool icedb::units::implementations::simpleUnits::validVol ( const std::string &  _inUnits,
const std::string &  _outUnits 
)

Definition at line 80 of file unitsSimple.cpp.

References _convFactor, _inUnits, and _outUnits.

Referenced by simpleUnits().

80  {
81  bool inV = false, outV = false;
82  _convFactor = 1.f;
83  std::string in = _inUnits, out = _outUnits;
84 
85  // If it doesn't end in ^3, add it. Used to prevent awkward string manipulations.
86  if (in.find("^3") == std::string::npos) in.append("^3");
87  if (out.find("^3") == std::string::npos) out.append("^3");
88  if (in == "nm^3") { _convFactor /= 1e27; inV = true; }
89  if (in == "um^3") { _convFactor /= 1e18; inV = true; }
90  if (in == "mm^3") { _convFactor /= 1e9; inV = true; }
91  if (in == "cm^3") { _convFactor /= 1e6; inV = true; }
92  if (in == "km^3") { _convFactor *= 1e6; inV = true; }
93  if (in == "m^3") inV = true;
94  if (out == "nm^3") { _convFactor *= 1e27; outV = true; }
95  if (out == "um^3") { _convFactor *= 1e18; outV = true; }
96  if (out == "mm^3") { _convFactor *= 1e9; outV = true; }
97  if (out == "cm^3") { _convFactor *= 1e6; outV = true; }
98  if (out == "km^3") { _convFactor /= 1e6; outV = true; }
99  if (out == "m^3") outV = true;
100  if (inV && outV) { return true; }
101  return false;
102  }
Here is the caller graph for this function:

Member Data Documentation

◆ _convFactor

double icedb::units::implementations::simpleUnits::_convFactor

◆ _inOffset

double icedb::units::implementations::simpleUnits::_inOffset

Definition at line 28 of file unitsBackend.hpp.

Referenced by convert(), and validTemp().

◆ _inUnits

std::string icedb::units::implementations::simpleUnits::_inUnits

Definition at line 29 of file unitsBackend.hpp.

Referenced by validVol().

◆ _outOffset

double icedb::units::implementations::simpleUnits::_outOffset

Definition at line 28 of file unitsBackend.hpp.

Referenced by convert(), and validTemp().

◆ _outUnits

std::string icedb::units::implementations::simpleUnits::_outUnits

Definition at line 29 of file unitsBackend.hpp.

Referenced by validVol().

◆ _valid

bool icedb::units::implementations::simpleUnits::_valid

Definition at line 30 of file unitsBackend.hpp.

Referenced by convert(), isValid(), and simpleUnits().


The documentation for this struct was generated from the following files: