quark_base.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // package quark_base -- базовый кварк
  2. package quark_base
  3. import (
  4. . "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
  5. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark/quark_val"
  6. )
  7. // QBase -- базовый кварк
  8. type QBase[M quark_val.CMod, T any] struct {
  9. mass int // Масса кварка
  10. val *quark_val.Field[M, T] // хранимое значение
  11. }
  12. // QBaseOpt -- опции для базового кварка
  13. type QBaseOpt[M quark_val.CMod, T any] func(qBase *QBase[M, T])
  14. // QBaseOptMass -- опция для массы кварка
  15. func QBaseOptMass[M quark_val.CMod, T any](mass int) QBaseOpt[M, T] {
  16. return func(sf *QBase[M, T]) {
  17. sf.mass = mass
  18. }
  19. }
  20. // QBaseOptVal -- опция для значения кварка
  21. func QBaseOptVal[M quark_val.Fix, T any](val T) QBaseOpt[quark_val.Fix, T] {
  22. return func(qBase *QBase[quark_val.Fix, T]) {
  23. qBase.val = quark_val.NewField(val)
  24. }
  25. }
  26. // QBaseOptValMut -- опция для изменяемого значения кварка
  27. func QBaseOptValMut[M quark_val.Mut, T any](val T) QBaseOpt[quark_val.Mut, T] {
  28. return func(sf *QBase[quark_val.Mut, T]) {
  29. sf.val = quark_val.NewFieldMut(val)
  30. }
  31. }
  32. // NewQBase -- создать новый фиксированный базовый кварк
  33. func NewQBase[M quark_val.Fix, T any](opts ...QBaseOpt[M, T]) *QBase[M, T] {
  34. sf := &QBase[M, T]{}
  35. for _, opt := range opts {
  36. opt(sf)
  37. }
  38. Hassert(sf.mass > 0, "NewQBase(): нулевая масса запрещена!")
  39. Hassert(sf.val != nil, "NewQBase(): значение не создано")
  40. return sf
  41. }
  42. // NewQBaseMut -- создать новый мутабельный базовый кварк
  43. func NewQBaseMut[M quark_val.Mut, T any](opts ...QBaseOpt[M, T]) *QBase[M, T] {
  44. sf := &QBase[M, T]{}
  45. for _, opt := range opts {
  46. opt(sf)
  47. }
  48. Hassert(sf.mass > 0, "NewQBase(): нулевая масса запрещена!")
  49. return sf
  50. }
  51. // Mass -- получить массу кварка
  52. func (sf *QBase[M, T]) Mass() int {
  53. return sf.mass
  54. }
  55. // Val -- возвращает хранимое значение
  56. func (sf *QBase[M, T]) Val() *quark_val.Field[M, T] {
  57. return sf.val
  58. }