| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- // package belt -- лента для исходных данных и результатов
- package belt
- import (
- "os"
- "sync"
- mKh "gitp78su.ipnodns.ru/svi/kern/v3/kc/helpers"
- mKl "gitp78su.ipnodns.ru/svi/kern/v3/kc/log_buf"
- mKt "gitp78su.ipnodns.ru/svi/kern/v3/krn/ktypes"
- )
- type Лента struct {
- log mKt.ILogBuf
- бинИсх []uint32
- бинВых []uint32
- размерИсход int // Оригинальный размер
- }
- var (
- сам *Лента
- блок sync.Mutex
- )
- // ЛентаПолуч -- возвращает ленту
- func ЛентаПолуч() *Лента {
- блок.Lock()
- defer блок.Unlock()
- if сам != nil {
- сам.log.Debug("")
- return сам
- }
- log := mKl.NewLogBuf(mKl.OptIsTerm(true), mKl.OptPrefix("Лента"))
- log.Debug("ЛентаПолуч()")
- сам = &Лента{
- log: log,
- бинИсх: []uint32{},
- бинВых: []uint32{},
- }
- сам.файлЧитать()
- return сам
- }
- func (сам *Лента) файлЧитать() {
- сам.log.Debug("файлЧитать()")
- файлИмя := os.Getenv("PACK_FILE")
- mKh.Hassert(файлИмя != "", "Лента.файлЧитать(): env PACK_FILE not set")
- binData, err := os.ReadFile(файлИмя)
- mKh.Hassert(err == nil, "Лента.файлЧитать(): in read %q, err=\n\t%v", файлИмя, err)
- сам.размерИсход = len(binData)
- for _, val := range binData {
- сам.бинИсх = append(сам.бинИсх, uint32(val))
- }
- сам.бинВых = сам.бинИсх
- сам.log.Debug("файлЧитать(): len(%q)=%v", файлИмя, len(сам.бинИсх))
- }
- // Вых -- выходная лента
- func (сам *Лента) Вых() []uint32 {
- return сам.бинВых
- }
- // Исх -- исходный текст ленты
- func (сам *Лента) Исх() []uint32 {
- return сам.бинИсх
- }
- // ИсхРазмер -- возвращает исходный размер ленты
- func (сам *Лента) ИсхРазмер() int {
- return len(сам.бинИсх)
- }
- // ВыхУст -- устанавливает выходной срез
- func (сам *Лента) ВыхУст(бинВых []uint32) {
- сам.бинВых = бинВых
- }
|