直播:后台 JWT 推流、前台画中画;WebRTC 服务与 Nginx WebSocket 代理
Made-with: Cursor
This commit is contained in:
70
server/vendor/github.com/pion/sctp/queue.go
generated
vendored
Normal file
70
server/vendor/github.com/pion/sctp/queue.go
generated
vendored
Normal file
@@ -0,0 +1,70 @@
|
||||
// SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly>
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package sctp
|
||||
|
||||
type queue[T any] struct {
|
||||
buf []T
|
||||
head int
|
||||
tail int
|
||||
count int
|
||||
}
|
||||
|
||||
const minCap = 16
|
||||
|
||||
func newQueue[T any](capacity int) *queue[T] {
|
||||
queueCap := minCap
|
||||
for queueCap < capacity {
|
||||
queueCap <<= 1
|
||||
}
|
||||
|
||||
return &queue[T]{
|
||||
buf: make([]T, queueCap),
|
||||
}
|
||||
}
|
||||
|
||||
func (q *queue[T]) Len() int {
|
||||
return q.count
|
||||
}
|
||||
|
||||
func (q *queue[T]) PushBack(ele T) {
|
||||
q.growIfFull()
|
||||
q.buf[q.tail] = ele
|
||||
q.tail = (q.tail + 1) % len(q.buf)
|
||||
q.count++
|
||||
}
|
||||
|
||||
func (q *queue[T]) PopFront() T {
|
||||
ele := q.buf[q.head]
|
||||
var zeroVal T
|
||||
q.buf[q.head] = zeroVal
|
||||
q.head = (q.head + 1) % len(q.buf)
|
||||
q.count--
|
||||
return ele
|
||||
}
|
||||
|
||||
func (q *queue[T]) Front() T {
|
||||
return q.buf[q.head]
|
||||
}
|
||||
|
||||
func (q *queue[T]) At(i int) T {
|
||||
return q.buf[(q.head+i)%(len(q.buf))]
|
||||
}
|
||||
|
||||
func (q *queue[T]) growIfFull() {
|
||||
if q.count < len(q.buf) {
|
||||
return
|
||||
}
|
||||
|
||||
newBuf := make([]T, q.count<<1)
|
||||
if q.tail > q.head {
|
||||
copy(newBuf, q.buf[q.head:q.tail])
|
||||
} else {
|
||||
n := copy(newBuf, q.buf[q.head:])
|
||||
copy(newBuf[n:], q.buf[:q.tail])
|
||||
}
|
||||
|
||||
q.head = 0
|
||||
q.tail = q.count
|
||||
q.buf = newBuf
|
||||
}
|
||||
Reference in New Issue
Block a user