icedb  version 0.5.1
Snow particle scattering database API
Classes | Typedefs | Functions | Variables
icedb::units::implementations Namespace Reference

Classes

class  converter_provider_registry
 
class  Converter_registry_provider
 
struct  simpleUnits
 
struct  spectralUnits
 
struct  Unithandler
 Opaque object provided to perform unit manipulations. More...
 

Typedefs

typedef std::shared_ptr< const Converter_registry_providerconv_prov_cp
 
typedef std::shared_ptr< const std::vector< conv_prov_cp > > conv_hooks_t
 

Functions

std::string _mangle_string (const std::string &inUnits, const std::string &outUnits, const std::string &family)
 
void _registerBackend (const std::string &inUnits, const std::string &outUnits, const std::string &family, converter_p p)
 
converter_p _queryBackend (const std::string &inUnits, const std::string &outUnits, const std::string &family)
 
void _init ()
 
conv_hooks_t getHooks ()
 

Variables

std::mutex m_backends
 
std::map< std::string, converter_p_backends
 
std::shared_ptr< std::vector< conv_prov_cp > > _providers
 

Typedef Documentation

◆ conv_hooks_t

typedef std::shared_ptr<const std::vector<conv_prov_cp> > icedb::units::implementations::conv_hooks_t

Definition at line 27 of file unitsPlugins.hpp.

◆ conv_prov_cp

Definition at line 26 of file unitsPlugins.hpp.

Function Documentation

◆ _init()

void icedb::units::implementations::_init ( )

Definition at line 49 of file unitsPlugins.cpp.

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

Referenced by icedb::units::converter::canConvert(), icedb::units::conv_spec::conv_spec(), icedb::units::converter::converter(), and icedb::units::converter::getConverter().

49  {
50  static bool inited = false;
51  if (inited) return;
52  inited = true;
53  //template <class base, class reg, class obj>
54  // void doRegisterHook(const obj& res)
55  std::shared_ptr<implementations::Converter_registry_provider> res(
56  new implementations::Converter_registry_provider);
57  res->canConvert = simpleUnits::canConvert;
58  res->constructConverter = simpleUnits::constructConverter;
59  static const char* name = "1simple";
60  res->name = name;
61  _providers = std::shared_ptr<std::vector<conv_prov_cp > >(new std::vector<conv_prov_cp >);
62  _providers->push_back(res);
63  }
std::shared_ptr< std::vector< conv_prov_cp > > _providers
Here is the call graph for this function:
Here is the caller graph for this function:

◆ _mangle_string()

std::string icedb::units::implementations::_mangle_string ( const std::string &  inUnits,
const std::string &  outUnits,
const std::string &  family 
)
inline

Definition at line 24 of file unitsPlugins.cpp.

Referenced by _queryBackend(), and _registerBackend().

25  {
26  std::string res(family);
27  res.append("___");
28  res.append(inUnits);
29  res.append("___");
30  res.append(outUnits);
31  return res;
32  }
Here is the caller graph for this function:

◆ _queryBackend()

converter_p icedb::units::implementations::_queryBackend ( const std::string &  inUnits,
const std::string &  outUnits,
const std::string &  family 
)

Definition at line 40 of file unitsPlugins.cpp.

References _mangle_string().

Referenced by icedb::units::converter::generate(), and icedb::units::conv_spec::generate().

41  {
42  std::string h = _mangle_string(inUnits, outUnits, family);
43  std::lock_guard<std::mutex> mlock(m_backends);
44  converter_p res;
45  if (_backends.count(h)) res = _backends.at(h);
46  return res;
47  }
std::map< std::string, converter_p > _backends
std::string _mangle_string(const std::string &inUnits, const std::string &outUnits, const std::string &family)
std::shared_ptr< const converter > converter_p
Definition: units.hpp:16
Here is the call graph for this function:
Here is the caller graph for this function:

◆ _registerBackend()

void icedb::units::implementations::_registerBackend ( const std::string &  inUnits,
const std::string &  outUnits,
const std::string &  family,
converter_p  p 
)

Definition at line 34 of file unitsPlugins.cpp.

References _mangle_string().

Referenced by icedb::units::converter::generate(), and icedb::units::conv_spec::generate().

35  {
36  std::lock_guard<std::mutex> mlock(m_backends);
37  std::string h = _mangle_string(inUnits, outUnits, family);
38  _backends.emplace(std::pair<std::string, converter_p>(h, p));
39  }
std::map< std::string, converter_p > _backends
std::string _mangle_string(const std::string &inUnits, const std::string &outUnits, const std::string &family)
Here is the call graph for this function:
Here is the caller graph for this function:

◆ getHooks()

conv_hooks_t icedb::units::implementations::getHooks ( )

Definition at line 64 of file unitsPlugins.cpp.

References _providers.

Referenced by icedb::units::converter::canConvert(), and icedb::units::converter::getConverter().

64  {
65  return _providers;
66  }
std::shared_ptr< std::vector< conv_prov_cp > > _providers
Here is the caller graph for this function:

Variable Documentation

◆ _backends

std::map<std::string, converter_p> icedb::units::implementations::_backends

Definition at line 21 of file unitsPlugins.cpp.

◆ _providers

std::shared_ptr<std::vector<conv_prov_cp > > icedb::units::implementations::_providers

Definition at line 22 of file unitsPlugins.cpp.

Referenced by getHooks().

◆ m_backends

std::mutex icedb::units::implementations::m_backends

Definition at line 20 of file unitsPlugins.cpp.