#include <mof/id_pool.hpp>

namespace mof
{
//{{{ ctor
	id_pool::id_pool()
		: next_id_(0)
	{
		// 何もしない
	}
//}}}
//{{{ make_id
	size_t id_pool::make_id()
	{
		if (unused_list_.empty()) {
			// 新規id発行
			return next_id_++;
		}
		else {
			// 使ってないidを発行
			size_t id = unused_list_.back();
			unused_list_.pop_back();
			return id;
		}
	}
//}}}
//{{{ release_id
	void id_pool::release_id(size_t id)
	{
		unused_list_.push_back(id);
	}
//}}}
//{{{ size
	size_t id_pool::size() const
	{
		return next_id_ - unused_list_.size();
	}
//}}}
}
