7 #ifndef PACKET_STORAGE_H
8 #define PACKET_STORAGE_H
10 #include <boost/noncopyable.hpp>
11 #include <boost/shared_ptr.hpp>
49 typedef typename std::list<PacketPtr> PacketContainer;
51 typedef typename PacketContainer::iterator PacketContainerIterator;
62 storage_.push_back(packet);
63 if (storage_.size() == 1) {
64 current_pointer_ = storage_.begin();
77 void clear(
const uint64_t num = 0) {
79 PacketContainerIterator last = storage_.begin();
80 std::advance(last, num >
size() ?
size() : num);
81 current_pointer_ = storage_.erase(storage_.begin(), last);
84 current_pointer_ = storage_.begin();
92 return (storage_.empty());
103 if (storage_.empty()) {
105 }
else if (current_pointer_ == storage_.end()) {
106 current_pointer_ = storage_.begin();
109 current_pointer_ = storage_.erase(current_pointer_);
126 current_pointer_ = storage_.begin();
128 std::advance(current_pointer_, rand() % (
size() - 1));
131 current_pointer_ = storage_.erase(current_pointer_);
139 return (storage_.size());
144 std::list<PacketPtr> storage_;
145 PacketContainerIterator current_pointer_;
153 #endif // PACKET_STORAGE_H