belt.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. // package belt -- лента для исходных данных и результатов
  2. package belt
  3. import (
  4. "os"
  5. "sync"
  6. mKh "gitp78su.ipnodns.ru/svi/kern/v3/kc/helpers"
  7. mKl "gitp78su.ipnodns.ru/svi/kern/v3/kc/log_buf"
  8. mKt "gitp78su.ipnodns.ru/svi/kern/v3/krn/ktypes"
  9. )
  10. type Лента struct {
  11. log mKt.ILogBuf
  12. бинИсх []uint32
  13. бинВых []uint32
  14. размерИсход int // Оригинальный размер
  15. }
  16. var (
  17. сам *Лента
  18. блок sync.Mutex
  19. )
  20. // ЛентаПолуч -- возвращает ленту
  21. func ЛентаПолуч() *Лента {
  22. блок.Lock()
  23. defer блок.Unlock()
  24. if сам != nil {
  25. сам.log.Debug("")
  26. return сам
  27. }
  28. log := mKl.NewLogBuf(mKl.OptIsTerm(true), mKl.OptPrefix("Лента"))
  29. log.Debug("ЛентаПолуч()")
  30. сам = &Лента{
  31. log: log,
  32. бинИсх: []uint32{},
  33. бинВых: []uint32{},
  34. }
  35. сам.файлЧитать()
  36. return сам
  37. }
  38. func (сам *Лента) файлЧитать() {
  39. сам.log.Debug("файлЧитать()")
  40. файлИмя := os.Getenv("PACK_FILE")
  41. mKh.Hassert(файлИмя != "", "Лента.файлЧитать(): env PACK_FILE not set")
  42. binData, err := os.ReadFile(файлИмя)
  43. mKh.Hassert(err == nil, "Лента.файлЧитать(): in read %q, err=\n\t%v", файлИмя, err)
  44. сам.размерИсход = len(binData)
  45. for _, val := range binData {
  46. сам.бинИсх = append(сам.бинИсх, uint32(val))
  47. }
  48. сам.бинВых = сам.бинИсх
  49. сам.log.Debug("файлЧитать(): len(%q)=%v", файлИмя, len(сам.бинИсх))
  50. }
  51. // Вых -- выходная лента
  52. func (сам *Лента) Вых() []uint32 {
  53. return сам.бинВых
  54. }
  55. // Исх -- исходный текст ленты
  56. func (сам *Лента) Исх() []uint32 {
  57. return сам.бинИсх
  58. }
  59. // ИсхРазмер -- возвращает исходный размер ленты
  60. func (сам *Лента) ИсхРазмер() int {
  61. return len(сам.бинИсх)
  62. }
  63. // ВыхУст -- устанавливает выходной срез
  64. func (сам *Лента) ВыхУст(бинВых []uint32) {
  65. сам.бинВых = бинВых
  66. }