140 throw std::runtime_error(
"Requested id has already been assigned.");
148 if (m_highest == NULL_ID && m_lowest == NULL_ID) {
151 }
else if (
id > m_highest) {
152 typename std::set<id_type>::iterator trashIterator = m_trash.end();
153 for (id_type wasteId = m_highest + 1; wasteId < id; ++wasteId) {
154 trashIterator = m_trash.insert(trashIterator, wasteId);
158 }
else if (
id < m_lowest) {
159 typename std::set<id_type>::iterator trashIterator = m_trash.end();
160 for (id_type wasteId =
id + 1; wasteId < m_lowest; ++wasteId) {
161 trashIterator = m_trash.insert(trashIterator, wasteId);
166 assert(m_trash.count(
id) > 0);
184 assert(
id != NULL_ID);
185 assert(m_trash.count(
id) == 0);
186 assert(
id >= m_lowest &&
id <= m_highest);
190 if (
id == m_highest &&
id == m_lowest) {
194 assert(m_trash.empty());
198 }
else if (
id == m_highest) {
200 auto trashIterator = m_trash.end();
201 while (!m_trash.empty()) {
203 if (*trashIterator != m_highest) {
207 trashIterator = m_trash.erase(trashIterator);
208 if (m_highest != 0) {
211 assert(m_trash.empty());
216 }
else if (
id == m_lowest) {
218 auto trashIterator = m_trash.begin();
219 while (!m_trash.empty()) {
220 if (*trashIterator != m_lowest) {
224 trashIterator = m_trash.erase(trashIterator);
233 if (
id == m_latest) {