// package quark_base -- базовый кварк. package quark_base import ( // mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers". "fmt" "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.Val[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.NewVal(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.NewValMut(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) } if sf.mass <= 0 { panic(fmt.Sprintf("NewQBase(): нулевая масса запрещена! mass=%v\n", sf.mass)) } if sf.val == nil { panic("NewQBase(): значение не создано! val==nil\n") } 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) } if sf.mass <= 0 { panic("NewQBaseMut(): нулевая масса запрещена!\n") } return sf } // Mass -- получить массу кварка. // //go:fix inline func (sf *QBase[M, T]) Mass() int { return sf.mass } // Val -- возвращает хранимое значение. func (sf *QBase[M, T]) Val() *quark_val.Val[M, T] { return sf.val }