cloak::cloak() { }
cloak::~cloak() { }
int cloak::peek() const
{
int n = 1;
for (tags_type::const_iterator it = tags_.begin(); it != tags_.end(); ++it)
{
if (*it != n)
{
return n;
}
n++;
}
return n;
}
int cloak::acquire()
{
return *(tags_.insert(peek()).first);
}
bool cloak::release(int n)
{
return tags_.erase(n) != 0;
}
void cloak::clear()
{
tags_.clear();
}
template<typename Iterator>
Iterator cloak::acquired(Iterator out) const
{
if (tags_.empty)
{
return out;
}
for (int n = 1; n <= *tags_.rbegin(); n++)
{
if (tags_.count(n) == 0)
{
(*out) = n;
++out;
}
}
return out;
}
template<typename Iterator>
Iterator cloak::released(Iterator out) const
{
if (tags_.empty)
{
return out;
}
for (int n = 1; n <= *tags_.rbegin(); n++)
{
if (tags_.count(n) != 0)
{
(*out) = n;
++out;
}
}
return out;
}