ID Allocator
Explanation Video Link on Youtube
#include <unordered_set>
#include <queue>
#include <limits>
class IdAllocater {
private:
std::unordered_set<int> allocated_ids_;
std::queue<int> available_ids_queue_;
int new_id_start_ = 0;
constexpr static int kMaxValue_ = std::numeric_limits<int>::max();
public:
int allocate() {
if (!available_ids_queue_.empty()) {
int id = available_ids_queue_.front();
available_ids_queue_.pop();
allocated_ids_.insert(id);
return id;
}
if (new_id_start_ == kMaxValue_) {
return -1;
}
allocated_ids_.insert(new_id_start_);
return new_id_start_++;
}
bool release(int id) {
if (!allocated_ids_.count(id)) {
return false;
}
allocated_ids_.erase(id);
available_ids_queue_.push(id);
return true;
}
};Last updated
Was this helpful?