ringbuffer

package
v0.3.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 2, 2020 License: MIT Imports: 4 Imported by: 0

README

ringbuffer

自动扩容的循环缓冲区实现

Github Actions Go Report Card Codacy Badge GoDoc LICENSE Code Size

使用

package main

import (
	"fmt"
	"github.com/FTwOoO/gev/toolkit/ringbuffer"
)

func main() {
	rb := ringbuffer.New(2)

	// 自动扩容
	fmt.Println(rb.Capacity())  //2
	fmt.Println(rb.Length())    //0

	rb.Write([]byte("ab"))
	fmt.Println(rb.Capacity())  //2
	fmt.Println(rb.Length())    //2

	rb.Write([]byte("cd"))
	fmt.Println(rb.Capacity())  //4
	fmt.Println(rb.Length())    //4

	// VirtualXXX 函数便捷操作
	rb = New(1024)
	_, _ = rb.Write([]byte("abcd"))
	fmt.Println(rb.Length())
	fmt.Println(rb.free())
	buf := make([]byte, 4)

	_, _ = rb.Read(buf)
	fmt.Println(string(buf))

	rb.Write([]byte("1234567890"))
	rb.VirtualRead(buf)
	fmt.Println(string(buf))
	fmt.Println(rb.Length())
	fmt.Println(rb.VirtualLength())
	rb.VirtualFlush()
	fmt.Println(rb.Length())
	fmt.Println(rb.VirtualLength())

	rb.VirtualRead(buf)
	fmt.Println(string(buf))
	fmt.Println(rb.Length())
	fmt.Println(rb.VirtualLength())
	rb.VirtualRevert()
	fmt.Println(rb.Length())
	fmt.Println(rb.VirtualLength())
	// Output: 4
	// 1020
	// abcd
	// 1234
	// 10
	// 6
	// 6
	// 6
	// 5678
	// 6
	// 2
	// 6
	// 6
}

参考

https://github.com/smallnest/ringbuffer

感谢

Documentation

Index

Examples

Constants

This section is empty.

Variables

View Source
var ErrIsEmpty = errors.New("ring buffer is empty")

ErrIsEmpty 缓冲区为空

Functions

This section is empty.

Types

type RingBuffer

type RingBuffer struct {
	// contains filtered or unexported fields
}

RingBuffer 自动扩容循环缓冲区

Example
rb := New(1024)
_, _ = rb.Write([]byte("abcd"))
fmt.Println(rb.Length())
fmt.Println(rb.free())
buf := make([]byte, 4)

_, _ = rb.Read(buf)
fmt.Println(string(buf))

rb.Write([]byte("1234567890"))
rb.VirtualRead(buf)
fmt.Println(string(buf))
fmt.Println(rb.Length())
fmt.Println(rb.VirtualLength())
rb.VirtualFlush()
fmt.Println(rb.Length())
fmt.Println(rb.VirtualLength())

rb.VirtualRead(buf)
fmt.Println(string(buf))
fmt.Println(rb.Length())
fmt.Println(rb.VirtualLength())
rb.VirtualRevert()
fmt.Println(rb.Length())
fmt.Println(rb.VirtualLength())
Output:

4
1020
abcd
1234
10
6
6
6
5678
6
2
6
6

func New

func New(size int) *RingBuffer

New 返回一个初始大小为 size 的 RingBuffer

func NewWithData

func NewWithData(data []byte) *RingBuffer

NewWithData 特殊场景使用,RingBuffer 会持有data,不会自己申请内存去拷贝

func (*RingBuffer) Bytes

func (r *RingBuffer) Bytes() (buf []byte)

Bytes 返回所有可读数据,此操作不会移动读指针,仅仅是拷贝全部数据

func (*RingBuffer) Capacity

func (r *RingBuffer) Capacity() int

func (*RingBuffer) IsEmpty

func (r *RingBuffer) IsEmpty() bool

func (*RingBuffer) IsFull

func (r *RingBuffer) IsFull() bool

func (*RingBuffer) Length

func (r *RingBuffer) Length() int

func (*RingBuffer) Peek

func (r *RingBuffer) Peek(len int) (first []byte, end []byte)

func (*RingBuffer) PeekAll

func (r *RingBuffer) PeekAll() (first []byte, end []byte)

func (*RingBuffer) PeekUint16

func (r *RingBuffer) PeekUint16() uint16

func (*RingBuffer) PeekUint32

func (r *RingBuffer) PeekUint32() uint32

func (*RingBuffer) PeekUint64

func (r *RingBuffer) PeekUint64() uint64

func (*RingBuffer) PeekUint8

func (r *RingBuffer) PeekUint8() uint8

func (*RingBuffer) Read

func (r *RingBuffer) Read(p []byte) (n int, err error)

func (*RingBuffer) ReadByte

func (r *RingBuffer) ReadByte() (b byte, err error)

func (*RingBuffer) Reset

func (r *RingBuffer) Reset()

func (*RingBuffer) Retrieve

func (r *RingBuffer) Retrieve(len int)

func (*RingBuffer) RetrieveAll

func (r *RingBuffer) RetrieveAll()

func (*RingBuffer) String

func (r *RingBuffer) String() string

func (*RingBuffer) VirtualFlush

func (r *RingBuffer) VirtualFlush()

VirtualFlush 刷新虚读指针 VirtualXXX 系列配合使用

func (*RingBuffer) VirtualLength

func (r *RingBuffer) VirtualLength() int

VirtualLength 虚拟长度,虚读后剩余可读数据长度 VirtualXXX 系列配合使用

func (*RingBuffer) VirtualRead

func (r *RingBuffer) VirtualRead(p []byte) (n int, err error)

VirtualRead 虚读,不移动 read 指针,需要配合 VirtualFlush 和 VirtualRevert 使用 VirtualXXX 系列配合使用

func (*RingBuffer) VirtualRevert

func (r *RingBuffer) VirtualRevert()

VirtualRevert 还原虚读指针 VirtualXXX 系列配合使用

func (*RingBuffer) Write

func (r *RingBuffer) Write(p []byte) (n int, err error)

func (*RingBuffer) WriteByte

func (r *RingBuffer) WriteByte(c byte) error

func (*RingBuffer) WriteString

func (r *RingBuffer) WriteString(s string) (n int, err error)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL