quark_val.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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. // Val -- кварк поля.
  12. type Val[M CMod, T any] struct {
  13. val T // Значение поля
  14. }
  15. // NewVal -- возвращает новое фиксированное значение.
  16. func NewVal[T any](val T) *Val[Fix, T] {
  17. sf := &Val[Fix, T]{
  18. val: val,
  19. }
  20. return sf
  21. }
  22. // NewValMut -- возвращает новое мутабельное значение.
  23. func NewValMut[T any](val T) *Val[Mut, T] {
  24. sf := &Val[Mut, T]{
  25. val: val,
  26. }
  27. return sf
  28. }
  29. // Get -- получить значение поля.
  30. //
  31. //go:fix inline
  32. func (sf *Val[M, T]) Get() T {
  33. return sf.val
  34. }
  35. // Set -- установить мутабельное значение.
  36. //
  37. //go:fix inline
  38. func Set[T any](sf *Val[Mut, T], val T) {
  39. sf.val = val
  40. }