Update some queue code since deques support random access

This commit is contained in:
Cary R 2020-11-14 17:06:30 -08:00
parent d6e01d0c55
commit d209e7533a
1 changed files with 9 additions and 81 deletions

View File

@ -591,22 +591,7 @@ void vvp_queue_real::insert(unsigned idx, double value, unsigned max_size)
<< max_size << "]." << endl; << max_size << "]." << endl;
queue.pop_back(); queue.pop_back();
} }
// Inserting at the beginning queue.insert(queue.begin()+idx, value);
if (idx == 0)
queue.push_front(value);
// Inserting in the middle
else {
std::deque<double>::iterator pos;
unsigned middle = queue.size()/2;
if (idx < middle) {
pos = queue.begin();
for (unsigned count = 0; count < idx; ++count) ++pos;
} else {
pos = queue.end();
for (unsigned count = queue.size(); count > idx; --count) --pos;
}
queue.insert(pos, value);
}
} }
} }
@ -635,17 +620,8 @@ void vvp_queue_real::push_front(double value, unsigned max_size)
void vvp_queue_real::erase(unsigned idx) void vvp_queue_real::erase(unsigned idx)
{ {
std::deque<double>::iterator pos; assert(queue.size() > idx);
unsigned middle = queue.size()/2; queue.erase(queue.begin()+idx);
if (idx < middle) {
pos = queue.begin();
for (unsigned count = 0; count < idx; ++count) ++pos;
} else {
pos = queue.end();
for (unsigned count = queue.size(); count > idx; --count) --pos;
}
queue.erase(pos);
} }
void vvp_queue_real::erase_tail(unsigned idx) void vvp_queue_real::erase_tail(unsigned idx)
@ -727,22 +703,7 @@ void vvp_queue_string::insert(unsigned idx, const string&value, unsigned max_siz
<< max_size << "]." << endl; << max_size << "]." << endl;
queue.pop_back(); queue.pop_back();
} }
// Inserting at the beginning queue.insert(queue.begin()+idx, value);
if (idx == 0)
queue.push_front(value);
// Inserting in the middle
else {
std::deque<string>::iterator pos;
unsigned middle = queue.size()/2;
if (idx < middle) {
pos = queue.begin();
for (unsigned count = 0; count < idx; ++count) ++pos;
} else {
pos = queue.end();
for (unsigned count = queue.size(); count > idx; --count) --pos;
}
queue.insert(pos, value);
}
} }
} }
@ -771,17 +732,8 @@ void vvp_queue_string::push_front(const string&value, unsigned max_size)
void vvp_queue_string::erase(unsigned idx) void vvp_queue_string::erase(unsigned idx)
{ {
std::deque<std::string>::iterator pos; assert(queue.size() > idx);
unsigned middle = queue.size()/2; queue.erase(queue.begin()+idx);
if (idx < middle) {
pos = queue.begin();
for (unsigned count = 0; count < idx; ++count) ++pos;
} else {
pos = queue.end();
for (unsigned count = queue.size(); count > idx; --count) --pos;
}
queue.erase(pos);
} }
void vvp_queue_string::erase_tail(unsigned idx) void vvp_queue_string::erase_tail(unsigned idx)
@ -863,22 +815,7 @@ void vvp_queue_vec4::insert(unsigned idx, const vvp_vector4_t&value, unsigned ma
<< value.size() << "]> [" << max_size << "]." << endl; << value.size() << "]> [" << max_size << "]." << endl;
queue.pop_back(); queue.pop_back();
} }
// Inserting at the beginning queue.insert(queue.begin()+idx, value);
if (idx == 0)
queue.push_front(value);
// Inserting in the middle
else {
std::deque<vvp_vector4_t>::iterator pos;
unsigned middle = queue.size()/2;
if (idx < middle) {
pos = queue.begin();
for (unsigned count = 0; count < idx; ++count) ++pos;
} else {
pos = queue.end();
for (unsigned count = queue.size(); count > idx; --count) --pos;
}
queue.insert(pos, value);
}
} }
} }
@ -907,17 +844,8 @@ void vvp_queue_vec4::push_front(const vvp_vector4_t&value, unsigned max_size)
void vvp_queue_vec4::erase(unsigned idx) void vvp_queue_vec4::erase(unsigned idx)
{ {
std::deque<vvp_vector4_t>::iterator pos; assert(queue.size() > idx);
unsigned middle = queue.size()/2; queue.erase(queue.begin()+idx);
if (idx < middle) {
pos = queue.begin();
for (unsigned count = 0; count < idx; ++count) ++pos;
} else {
pos = queue.end();
for (unsigned count = queue.size(); count > idx; --count) --pos;
}
queue.erase(pos);
} }
void vvp_queue_vec4::erase_tail(unsigned idx) void vvp_queue_vec4::erase_tail(unsigned idx)