| // Copyright 2016 The Netstack Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package tcp |
| |
| type segmentHeap []*segment |
| |
| // Len returns the length of h. |
| func (h segmentHeap) Len() int { |
| return len(h) |
| } |
| |
| // Less determines whether the i-th element of h is less than the j-th element. |
| func (h segmentHeap) Less(i, j int) bool { |
| return h[i].sequenceNumber.LessThan(h[j].sequenceNumber) |
| } |
| |
| // Swap swaps the i-th and j-th elements of h. |
| func (h segmentHeap) Swap(i, j int) { |
| h[i], h[j] = h[j], h[i] |
| } |
| |
| // Push adds x as the last element of h. |
| func (h *segmentHeap) Push(x interface{}) { |
| *h = append(*h, x.(*segment)) |
| } |
| |
| // Pop removes the last element of h and returns it. |
| func (h *segmentHeap) Pop() interface{} { |
| old := *h |
| n := len(old) |
| x := old[n-1] |
| *h = old[:n-1] |
| return x |
| } |