| 13 | } |
| 14 | |
| 15 | buffer_t frame_queue::read(framesize_t s) |
| 16 | { |
| 17 | if (current_size < s) |
| 18 | throw frame_queue_exception(); |
| 19 | buffer_t ret; |
| 20 | while (s > 0 && s >= buffer_deque.front().size()) { |
| 21 | s -= buffer_deque.front().size(); |
| 22 | current_size -= buffer_deque.front().size(); |
| 23 | ret.insert(ret.end(), |
| 24 | buffer_deque.front().begin(), |
| 25 | buffer_deque.front().end()); |
| 26 | buffer_deque.pop_front(); |
| 27 | } |
| 28 | if (s > 0) { |
| 29 | ret.insert(ret.end(), |
| 30 | buffer_deque.front().begin(), |
| 31 | buffer_deque.front().begin() + s); |
| 32 | buffer_deque.front().erase(buffer_deque.front().begin(), |
| 33 | buffer_deque.front().begin() + s); |
| 34 | current_size -= s; |
| 35 | } |
| 36 | return ret; |
| 37 | } |
| 38 | |
| 39 | void frame_queue::write(buffer_t buf) |
| 40 | { |