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