1#ifndef UNIQUE_ID_GENERATOR_HPP
2#define UNIQUE_ID_GENERATOR_HPP
6#include <unordered_set>
33 throw std::invalid_argument(
"Invalid or already reclaimed ID");
44 for (
size_t i = 0;
i < ids.size(); ++
i) {
46 if (
i < ids.size() - 1) {
63 throw std::invalid_argument(
"max_value must be greater than 0");
66 for (
int i = 0;
i < max_value; ++
i) {
67 available_ids.push(
i);
72 if (available_ids.empty()) {
73 throw std::runtime_error(
"Maximum ID limit reached");
76 int id = available_ids.front();
83 if (id_value < 0 || id_value >= max_value || used_ids.find(id_value) == used_ids.end()) {
84 throw std::invalid_argument(
"Invalid or already reclaimed ID: " + std::to_string(id_value));
87 used_ids.erase(id_value);
88 available_ids.push(id_value);
92 std::vector<int> free_ids;
93 std::queue<int> temp_queue = available_ids;
94 while (!temp_queue.empty()) {
95 free_ids.push_back(temp_queue.front());
101 std::vector<int>
get_used_ids()
const {
return std::vector<int>(used_ids.begin(), used_ids.end()); }
106 std::ostringstream ss;
109 for (
size_t i = 0;
i < ids.size(); ++
i) {
111 if (
i < ids.size() - 1) {
126 std::queue<int> available_ids;
127 std::unordered_set<int> used_ids;
144 static int current_id;
std::vector< int > get_used_ids() const
Definition unique_id_generator.hpp:101
double get_used_percentage() const
Definition unique_id_generator.hpp:103
void reclaim_id(int id_value) override
Definition unique_id_generator.hpp:82
friend std::ostream & operator<<(std::ostream &os, const BoundedUniqueIDGenerator &generator)
Definition unique_id_generator.hpp:119
std::vector< int > get_free_ids() const
Definition unique_id_generator.hpp:91
std::string to_string() const
Definition unique_id_generator.hpp:105
int get_id() override
Definition unique_id_generator.hpp:71
BoundedUniqueIDGenerator(int max_value)
Definition unique_id_generator.hpp:61
A class for generating unique IDs.
Definition unique_id_generator.hpp:134
static int get_id()
Retrieves the next unique ID.
Definition unique_id_generator.cpp:6
static int last_generated_id
Definition unique_id_generator.hpp:141
Definition unique_id_generator.hpp:10
virtual void reclaim_id(int id)=0
virtual ~IDGenerator()
Definition unique_id_generator.hpp:14
Definition unique_id_generator.hpp:17
friend std::ostream & operator<<(std::ostream &os, const UniqueIDGenerator &generator)
Definition unique_id_generator.hpp:41
int get_id() override
Definition unique_id_generator.hpp:19
std::unordered_set< int > used_ids
Definition unique_id_generator.hpp:55
std::vector< int > get_used_ids() const
Definition unique_id_generator.hpp:39
int next_id
Definition unique_id_generator.hpp:54
std::queue< int > reclaimed_ids
Definition unique_id_generator.hpp:56
void reclaim_id(int id_value) override
Definition unique_id_generator.hpp:31