quark_val.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. // package quark_val -- кварк значения.
  2. package quark_val
  3. // Fix -- фиксированное значение.
  4. type Fix struct{}
  5. // Mut -- изменяемое значение.
  6. type Mut struct{}
  7. // CMod -- ограничитель модификации.
  8. type CMod interface {
  9. Fix | Mut
  10. }
  11. // Field -- кварк поля.
  12. type Field[M CMod, T any] struct {
  13. val T // Значение поля
  14. }
  15. // NewField -- возвращает новое фиксированное значение.
  16. func NewField[T any](val T) *Field[Fix, T] {
  17. sf := &Field[Fix, T]{
  18. val: val,
  19. }
  20. return sf
  21. }
  22. // NewFieldMut -- возвращает новое мутабельное значение.
  23. func NewFieldMut[T any](val T) *Field[Mut, T] {
  24. sf := &Field[Mut, T]{
  25. val: val,
  26. }
  27. return sf
  28. }
  29. // Получить значение поля.
  30. func (sf *Field[M, T]) Get() T {
  31. return sf.val
  32. }
  33. // Set -- установить мутабельное значение.
  34. func Set[T any](sf *Field[Mut, T], val T) {
  35. sf.val = val
  36. }