ID Allocator

Explanation Video Link on Youtube

B站中文解说视频链接

#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?