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