5 #include "../icedb/units/units.hpp" 6 #include "../icedb/units/unitsPlugins.hpp" 7 #include "../private/unitsBackend.hpp" 8 #include "../icedb/logging.hpp" 9 #include "../icedb/error.hpp" 10 #include "../private/options.hpp" 15 namespace implementations {
24 inline std::string
_mangle_string(
const std::string &inUnits,
const std::string &outUnits,
25 const std::string &family) {
26 std::string res(family);
36 std::lock_guard<std::mutex> mlock(m_backends);
38 _backends.emplace(std::pair<std::string, converter_p>(h, p));
41 const std::string &family) {
43 std::lock_guard<std::mutex> mlock(m_backends);
45 if (_backends.count(h)) res = _backends.at(h);
50 static bool inited =
false;
55 std::shared_ptr<implementations::Converter_registry_provider> res(
59 static const char* name =
"1simple";
61 _providers = std::shared_ptr<std::vector<conv_prov_cp > >(
new std::vector<conv_prov_cp >);
62 _providers->push_back(res);
70 const std::string &inUnits,
const std::string &outUnits) {
77 opts->setVal<std::string>(
"inUnits", inUnits);
78 opts->setVal<std::string>(
"outUnits", outUnits);
79 for (
const auto &i : *(hooks.get()))
81 if (!i->canConvert)
continue;
82 if (!i->constructConverter)
continue;
83 if (!i->canConvert(opts))
continue;
84 return i->constructConverter(opts);
88 "conversions between " << inUnits <<
" and " << outUnits <<
".");
static bool canConvert(Converter_registry_provider::optsType opts)
std::shared_ptr< const std::vector< conv_prov_cp > > conv_hooks_t
~Converter_registry_provider()
static Unithandler_p getConverter(const std::string &inUnits, const std::string &outUnits)
std::map< std::string, converter_p > _backends
static std::shared_ptr< options > generate()
std::shared_ptr< std::vector< conv_prov_cp > > _providers
std::string _mangle_string(const std::string &inUnits, const std::string &outUnits, const std::string &family)
Unithandler(const char *id)
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)
Converter_registry_provider()
#define ICEDB_log(c, p, x)
static std::shared_ptr< const Unithandler > constructConverter(Converter_registry_provider::optsType opts)
std::shared_ptr< const converter > converter_p