下面是一个随机的 packet(帧)插入函数,ASC升序,按 “packet_seq” 来控制成员之间的顺序,该函数优化了,倾向头、倾向尾。
即:
根据 packet_seq 可以得出,插入位置的最短距离,更偏向左侧、还是右侧,该函数实现仅供参考,若需要多线程访问,需要确保 “代码临界区同步问题”。
#include <iostream>
#include <list>
#include <memory>
struct tag_packet {
uint32_t packet_seq;
};
void emplace_packet(std::list<tag_packet>& queue, const tag_packet& packet) {
for (;;) {
auto tail = queue.begin();
if (tail == queue.end()) {
queue.emplace_back(packet);
break;
}
if (tail->packet_seq > packet.packet_seq) {
queue.emplace_front(packet);
break;
}
auto rtail = queue.rbegin();
if (rtail->packet_seq <= packet.packet_seq) {
queue.emplace_back(packet);
break;
}
if ((pa