| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- // 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 -- возвращает хранимое значение.
- //
- //go:fix inline
- func (sf *QBase[M, T]) Val() *quark_val.Val[M, T] {
- return sf.val
- }
|