// 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) { сам.бинВых = бинВых }