#include #include #include #include #include "stg/user_property.h" #include "stg/tariffs.h" #include "stg/users.h" #include "tables.h" std::pair TD2Info(const TARIFF_DATA & td); void TariffUsersTable::UpdateSensors(Sensors & sensors) const { std::map data; std::list tdl; tariffs.GetTariffsData(&tdl); std::transform(tdl.begin(), tdl.end(), std::inserter(data, data.begin()), TD2Info); int handle = users.OpenSearch(); assert(handle && "USERS::OpenSearch is always correct"); USER_PTR user; while (!users.SearchNext(handle, &user)) { if (user->GetDeleted()) continue; std::string tariffName(user->GetProperty().tariffName.ConstData()); std::map::iterator it(data.lower_bound(tariffName)); if (it == data.end() || it->first != tariffName) { data.insert(it, std::make_pair(tariffName, 1)); } else { ++it->second; } } users.CloseSearch(handle); size_t idx = 1; OID prefixOid(prefix); std::map::const_iterator it(data.begin()); while (it != data.end()) { sensors[prefixOid.copyWithSuffix(2, static_cast(idx))] = new ConstSensor(it->first); sensors[prefixOid.copyWithSuffix(3, static_cast(idx))] = new ConstSensor(it->second); ++idx; ++it; } } std::pair TD2Info(const TARIFF_DATA & td) { return std::make_pair(td.tariffConf.name, 0); }