21 #include "../common/exception.hpp"
28 : max_size_(conf.max_size) {
32 "max_size must be a positive integer"));
35 if (*conf.
seed < 0 || std::numeric_limits<uint32_t>::max() < *conf.
seed) {
38 "unlearner seed must be within unsigned 32 bit integer"));
40 mtr_ = jubatus::util::math::random::mtrand(*conf.
seed);
55 size_t new_id_pos = -1;
59 new_id_pos =
ids_.size() - 1;
63 const std::string old_id =
ids_[new_id_pos];
66 ids_[new_id_pos] = id;
68 id_map_.insert(std::make_pair(
id, new_id_pos));
78 const size_t id_pos =
id_map_[id];
82 const std::string back_id =
ids_.back();
85 ids_[id_pos] = back_id;
random_unlearner(const config &conf)
bool remove(const std::string &id)
jubatus::util::math::random::mtrand mtr_
bool can_touch(const std::string &id)
void unlearn(const std::string &id) const
#define JUBATUS_EXCEPTION(e)
jubatus::util::data::optional< std::string > unlearner
bool exists_in_memory(const std::string &id) const
jubatus::util::data::unordered_map< std::string, size_t > id_map_
bool touch(const std::string &id)
std::vector< std::string > ids_
jubatus::util::data::optional< int64_t > seed