types

package
v0.0.0-...-0594d08 Latest Latest
Warning

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

Go to latest
Published: Jun 17, 2023 License: MIT Imports: 11 Imported by: 0

Documentation

Overview

Package types содержит определения типов используемых в работе с хранилищем и состоянием, а так же базовые операции с ними в виде функций (не методов).

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func IndexCmp

func IndexCmp(a, b Index) int

IndexCmp сравнение левого и правого индексов. Возвращает:

  • -1 если левый индекс относится к более раннему событию
  • 0 если индексы относятся к одному событию
  • 1 если левый индекс относится к более позднему событию

func IndexDecode

func IndexDecode(dst *Index, src []byte)

IndexDecode десериализация индекса. Внимание: размер буфера не проверяется и в случаем размера меньшего 16 байт будет паника.

Example
package main

import (
	"fmt"

	"github.com/sirkon/mpy6a/internal/types"
)

func main() {
	id := types.NewIndex(12, 13)

	var buf [16]byte
	types.IndexEncode(buf[:], id)

	fmt.Println(id)
	var cid types.Index
	types.IndexDecode(&cid, buf[:])
	fmt.Println(cid)

}
Output:

000000000000000c-000000000000000d
000000000000000c-000000000000000d

func IndexDecodeCheck

func IndexDecodeCheck(dst *Index, src []byte) bool

IndexDecodeCheck аналогично IndexDecode + проверка, что срок в индексе имеет корректное значение.

func IndexEncode

func IndexEncode(dst []byte, id Index)

IndexEncode сериализация индекса. Внимание: размер буфера не проверяется и в случаем размера меньшего 16 байт будет паника.

func IndexEncodeAppend

func IndexEncodeAppend(dst []byte, id Index) []byte

IndexEncodeAppend аналогично IndexEncode, но с соблюдением Append-протокола.

func IndexEqual

func IndexEqual(a, b Index) bool

IndexEqual проверка, что индексы равны.

func IndexLE

func IndexLE(a, b Index) bool

IndexLE = IndexLess || IndexEqual.

func IndexLess

func IndexLess(a, b Index) bool

IndexLess проверка, что индекс a относится к более раннему периоду чем b.

func SessionAppendRawLen

func SessionAppendRawLen(s *Session, data []byte) int

SessionAppendRawLen возвращает размер сессии, которая та примет при добавлении нового куска данных.

func SessionDecode

func SessionDecode(s *Session, src []byte) error

SessionEncode decodes content of Session.

func SessionEncode

func SessionEncode(dst []byte, s *Session) []byte

SessionEncode encodes content of Session.

func SessionRawLen

func SessionRawLen(s *Session) int

SessionRawLen возвращает длину закодированной сессии.

func SessionRewriteRawLen

func SessionRewriteRawLen(s *Session, data []byte) int

SessionRewriteRawLen возвращает размер сессии, которая та примет если её содержимое будет замещено новыми данными.

Types

type Index

type Index struct {
	Term  uint64
	Index uint64
}

Index счётчик состояния.

Example
package main

import (
	"fmt"

	"github.com/sirkon/mpy6a/internal/types"
)

func main() {
	id := types.NewIndex(1, 2)
	fmt.Println(id)

	id = types.IndexIncIndex(id)
	fmt.Println(id)

	id = types.IndexIncTerm(id)
	fmt.Println(id)

	fmt.Println(types.IndexLess(id, id))
	fmt.Println(types.IndexLess(id, types.IndexIncIndex(id)))
	fmt.Println(types.IndexLess(id, types.IndexIncTerm(id)))

}
Output:

0000000000000001-0000000000000002
0000000000000001-0000000000000003
0000000000000002-0000000000000000
false
true
true

func IndexIncIndex

func IndexIncIndex(index Index) Index

IndexIncIndex возвращает новый индекс с увеличенным на единицу индексом в рамках срока.

func IndexIncTerm

func IndexIncTerm(index Index) Index

IndexIncTerm возвращает новый индекс с увеличенным на единицу сроком.

func NewIndex

func NewIndex(term uint64, index uint64) Index

NewIndex конструктор нового индекса состояния.

func (Index) String

func (id Index) String() string

type IndexAtomic

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

IndexAtomic индекс для атомарной работы. Экземпляр этого типа должен создаваться исключительно с использованием конструктора NewIndexAtomic.

func NewIndexAtomic

func NewIndexAtomic() IndexAtomic

NewIndexAtomic создание нового атомарного индекса.

func (IndexAtomic) Get

func (id IndexAtomic) Get() Index

Get атомарное получение индекса.

func (IndexAtomic) Set

func (id IndexAtomic) Set(index Index)

Set атомарная установка индекса в заданное значение.

type Session

type Session struct {
	// ID идентификатор сессии, равен индексу состояния в момент её создания.
	// Так же это и "время" её первого изменения.
	ID Index

	// ChangeID идентификатор последнего состояния при котором сессия
	// претерпела изменения.
	ChangeID Index

	// Repeats количество повторов которое успела претерпеть сессия.
	Repeats intypes.VU32

	// Theme тема сессии.
	Theme intypes.VU32

	// Data данные сессии.
	Data SessionData
}

Session представление данных сессии.

func NewSession

func NewSession(ID Index, theme uint32, data []byte) Session

NewSession создание новой сессии.

func (*Session) String

func (s *Session) String() string

type SessionData

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

SessionData обёртка для слайсов байт с хранением общей длины кодируемых данных для ускорения некоторых задач буферизации.

func (*SessionData) Append

func (d *SessionData) Append(data []byte)

Append добавление нового куска данных в сессию.

func (*SessionData) Decode

func (d *SessionData) Decode(src []byte) ([]byte, error)

Decode метод декодирования данных.

func (*SessionData) Encode

func (d *SessionData) Encode(dst []byte) []byte

Encode метод кодирования данных.

func (*SessionData) Len

func (d *SessionData) Len() int

Len возвращает длину текущих данных в кодированном виде.

func (*SessionData) Replace

func (d *SessionData) Replace(data []byte)

Replace замена данных сессии на кусок.

type TimeAtomic

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

TimeAtomic примитив для атомарного использования в рамках одной временной зоны.

Warning может сломаться в версиях Go старше 1.20 – как только

внутреннее представление перестанет быть эквивалентным
(uint64, int64, *time.Location) с точки зрения раскладки в памяти.

func NewTimeAtomic

func NewTimeAtomic() TimeAtomic

NewTimeAtomic создаёт объект для атомарного времени.

Example
package main

import (
	"fmt"
	"time"

	"github.com/sirkon/mpy6a/internal/types"
)

func main() {
	a := types.NewTimeAtomic()
	now := time.Now()
	a.Set(now)
	time.Sleep(time.Second / 100)
	nn := a.Get()
	fmt.Println(nn.Equal(now))
}
Output:

true

func (*TimeAtomic) Get

func (a *TimeAtomic) Get() (res time.Time)

Get атомарно получает время.

func (*TimeAtomic) Set

func (a *TimeAtomic) Set(t time.Time)

Set атомарно устанавливает значение времени в данное.

Directories

Path Synopsis
internal

Jump to

Keyboard shortcuts

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