// package quark_base -- базовый кварк package quark_base import ( . "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers" "gitp78su.ipnodns.ru/svi/kern/v4/lev0/quark/quark_val" ) // QBase -- базовый кварк type QBase[M quark_val.CMod, T any] struct { mass int // Масса кварка val *quark_val.Field[M, T] // хранимое значение } // QBaseOpt -- опции для базового кварка type QBaseOpt[M quark_val.CMod, T any] func(qBase *QBase[M, T]) // QBaseOptMass -- опция для массы кварка func QBaseOptMass[M quark_val.CMod, T any](mass int) QBaseOpt[M, T] { return func(sf *QBase[M, T]) { sf.mass = mass } } // QBaseOptVal -- опция для значения кварка func QBaseOptVal[M quark_val.Fix, T any](val T) QBaseOpt[quark_val.Fix, T] { return func(qBase *QBase[quark_val.Fix, T]) { qBase.val = quark_val.NewField(val) } } // QBaseOptValMut -- опция для изменяемого значения кварка func QBaseOptValMut[M quark_val.Mut, T any](val T) QBaseOpt[quark_val.Mut, T] { return func(sf *QBase[quark_val.Mut, T]) { sf.val = quark_val.NewFieldMut(val) } } // NewQBase -- создать новый фиксированный базовый кварк func NewQBase[M quark_val.Fix, T any](opts ...QBaseOpt[M, T]) *QBase[M, T] { sf := &QBase[M, T]{} for _, opt := range opts { opt(sf) } Hassert(sf.mass > 0, "NewQBase(): нулевая масса запрещена!") Hassert(sf.val != nil, "NewQBase(): значение не создано") return sf } // NewQBaseMut -- создать новый мутабельный базовый кварк func NewQBaseMut[M quark_val.Mut, T any](opts ...QBaseOpt[M, T]) *QBase[M, T] { sf := &QBase[M, T]{} for _, opt := range opts { opt(sf) } Hassert(sf.mass > 0, "NewQBase(): нулевая масса запрещена!") return sf } // Mass -- получить массу кварка func (sf *QBase[M, T]) Mass() int { return sf.mass } // Val -- возвращает хранимое значение func (sf *QBase[M, T]) Val() *quark_val.Field[M, T] { return sf.val }