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::spectralUnits Struct Reference

#include <unitsBackend.hpp>

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

Public Member Functions

 spectralUnits (const std::string &in, const std::string &out)
 
virtual ~spectralUnits ()
 
virtual bool isValid () const
 
virtual double convert (double input) 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 implementations::UnithandlerconstructConverter (Converter_registry_provider::optsType opts)
 

Public Attributes

std::string _inUnits
 
std::string _outUnits
 
bool _valid
 
bool _Iin
 
bool _Iout
 
std::shared_ptr< const implementations::UnithandlerhIn
 
std::shared_ptr< const implementations::UnithandlerhOut
 

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 35 of file unitsBackend.hpp.

Constructor & Destructor Documentation

◆ spectralUnits()

icedb::units::implementations::spectralUnits::spectralUnits ( const std::string &  in,
const std::string &  out 
)

◆ ~spectralUnits()

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

Definition at line 221 of file unitsSimple.cpp.

221 {}

Member Function Documentation

◆ canConvert()

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

Definition at line 174 of file unitsSimple.cpp.

References icedb::units::converter::canConvert().

174  {
175  const std::string in = opts->getVal<std::string>("inUnits");
176  const std::string out = opts->getVal<std::string>("outUnits");
177  bool inIsLen = converter::canConvert(in, "m");
178  bool inIsWv = converter::canConvert(in, "Hz");
179  bool outIsLen = converter::canConvert(out, "m");
180  bool outIsWv = converter::canConvert(out, "Hz");
181  if ((inIsLen || inIsWv) && (outIsLen || outIsWv)) return true;
182  return false;
183  }
static bool canConvert(const std::string &inUnits, const std::string &outUnits)
Check if two units can be interconverted.
Definition: units.cpp:28
Here is the call graph for this function:

◆ constructConverter()

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

Definition at line 184 of file unitsSimple.cpp.

References icedb::units::converter::canConvert(), icedb::units::converter::getConverter(), and icedb::units::implementations::simpleUnits::simpleUnits().

Referenced by icedb::units::conv_spec::conv_spec().

185  {
186  const std::string in = opts->getVal<std::string>("inUnits");
187  const std::string out = opts->getVal<std::string>("outUnits");
188 
189  // Can input be converted to a length, or is it an inverse length?
190  bool inIsLen = converter::canConvert(in, "m");
191  bool inIsWv = converter::canConvert(in, "Hz");
192  bool outIsLen = converter::canConvert(out, "m");
193  bool outIsWv = converter::canConvert(out, "Hz");
194  if ((inIsLen && outIsLen) || (inIsWv && outIsWv)) {
195  return std::shared_ptr<simpleUnits>(new simpleUnits(in, out, true));
196  }
197  // These are heterogeneous.
198  std::shared_ptr<spectralUnits> res(new spectralUnits(in, out));
199 
200  if (inIsLen) {
201  res->hIn = converter::getConverter(in, "m");
202  res->_Iin = true;
203  }
204  if (inIsWv) res->hIn = converter::getConverter(in, "Hz");
205  if (outIsLen) {
206  res->hOut = converter::getConverter("m", out);
207  res->_Iout = true;
208  }
209  if (outIsWv) res->hOut = converter::getConverter("Hz", out);
210  if (res->hIn && res->hOut) res->_valid = true;
211  else res->_valid = false;
212  return res;
213  }
static Unithandler_p getConverter(const std::string &inUnits, const std::string &outUnits)
static bool canConvert(const std::string &inUnits, const std::string &outUnits)
Check if two units can be interconverted.
Definition: units.cpp:28
spectralUnits(const std::string &in, const std::string &out)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ convert()

double icedb::units::implementations::spectralUnits::convert ( double  input) const
virtual

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

Definition at line 224 of file unitsSimple.cpp.

References _Iin, _Iout, _valid, hIn, and hOut.

224  {
225  if (!_valid) return -1;
226  double res = input;
227  res = hIn->convert(res);
228 
229  const double c = 2.99792458e8; // m/s
230  // If inversion needed...
231  if (_Iin) res = c / res;
232  // Res is now in Hz. Do output conversion.
233  if (_Iout) res = c / res;
234  res = hOut->convert(res);
235 
236  return res;
237  }
std::shared_ptr< const implementations::Unithandler > hOut
std::shared_ptr< const implementations::Unithandler > hIn

◆ isValid()

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

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

Definition at line 222 of file unitsSimple.cpp.

References _valid.

Member Data Documentation

◆ _Iin

bool icedb::units::implementations::spectralUnits::_Iin

Definition at line 42 of file unitsBackend.hpp.

Referenced by convert().

◆ _inUnits

std::string icedb::units::implementations::spectralUnits::_inUnits

Definition at line 41 of file unitsBackend.hpp.

◆ _Iout

bool icedb::units::implementations::spectralUnits::_Iout

Definition at line 42 of file unitsBackend.hpp.

Referenced by convert().

◆ _outUnits

std::string icedb::units::implementations::spectralUnits::_outUnits

Definition at line 41 of file unitsBackend.hpp.

◆ _valid

bool icedb::units::implementations::spectralUnits::_valid

Definition at line 42 of file unitsBackend.hpp.

Referenced by convert(), and isValid().

◆ hIn

std::shared_ptr<const implementations::Unithandler> icedb::units::implementations::spectralUnits::hIn

Definition at line 43 of file unitsBackend.hpp.

Referenced by convert().

◆ hOut

std::shared_ptr<const implementations::Unithandler> icedb::units::implementations::spectralUnits::hOut

Definition at line 43 of file unitsBackend.hpp.

Referenced by convert().


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