Documentation
¶
Overview ¶
Package types содержит определения типов используемых в работе с хранилищем и состоянием, а так же базовые операции с ними в виде функций (не методов).
Index ¶
- func IndexCmp(a, b Index) int
- func IndexDecode(dst *Index, src []byte)
- func IndexDecodeCheck(dst *Index, src []byte) bool
- func IndexEncode(dst []byte, id Index)
- func IndexEncodeAppend(dst []byte, id Index) []byte
- func IndexEqual(a, b Index) bool
- func IndexLE(a, b Index) bool
- func IndexLess(a, b Index) bool
- func SessionAppendRawLen(s *Session, data []byte) int
- func SessionDecode(s *Session, src []byte) error
- func SessionEncode(dst []byte, s *Session) []byte
- func SessionRawLen(s *Session) int
- func SessionRewriteRawLen(s *Session, data []byte) int
- type Index
- type IndexAtomic
- type Session
- type SessionData
- type TimeAtomic
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func IndexCmp ¶
IndexCmp сравнение левого и правого индексов. Возвращает:
- -1 если левый индекс относится к более раннему событию
- 0 если индексы относятся к одному событию
- 1 если левый индекс относится к более позднему событию
func IndexDecode ¶
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 ¶
IndexDecodeCheck аналогично IndexDecode + проверка, что срок в индексе имеет корректное значение.
func IndexEncode ¶
IndexEncode сериализация индекса. Внимание: размер буфера не проверяется и в случаем размера меньшего 16 байт будет паника.
func IndexEncodeAppend ¶
IndexEncodeAppend аналогично IndexEncode, но с соблюдением Append-протокола.
func SessionAppendRawLen ¶
SessionAppendRawLen возвращает размер сессии, которая та примет при добавлении нового куска данных.
func SessionDecode ¶
SessionEncode decodes content of Session.
func SessionEncode ¶
SessionEncode encodes content of Session.
func SessionRawLen ¶
SessionRawLen возвращает длину закодированной сессии.
func SessionRewriteRawLen ¶
SessionRewriteRawLen возвращает размер сессии, которая та примет если её содержимое будет замещено новыми данными.
Types ¶
type Index ¶
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 ¶
IndexIncIndex возвращает новый индекс с увеличенным на единицу индексом в рамках срока.
func IndexIncTerm ¶
IndexIncTerm возвращает новый индекс с увеличенным на единицу сроком.
type IndexAtomic ¶
type IndexAtomic struct {
// contains filtered or unexported fields
}
IndexAtomic индекс для атомарной работы. Экземпляр этого типа должен создаваться исключительно с использованием конструктора NewIndexAtomic.
func NewIndexAtomic ¶
func NewIndexAtomic() IndexAtomic
NewIndexAtomic создание нового атомарного индекса.
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 ¶
NewSession создание новой сессии.
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) Set ¶
func (a *TimeAtomic) Set(t time.Time)
Set атомарно устанавливает значение времени в данное.