github.com/voedger/voedger@v0.0.0-20240520144910-273e84102129/pkg/state/safestate/provide.go (about) 1 /* 2 * Copyright (c) 2024-present unTill Software Development Group B. V. 3 * @author Michael Saigachenko 4 */ 5 6 package safestate 7 8 import ( 9 "github.com/voedger/voedger/pkg/istructs" 10 "github.com/voedger/voedger/pkg/state" 11 safe "github.com/voedger/voedger/pkg/state/isafestateapi" 12 ) 13 14 // oldApi is optional, to allow re-usage 15 func Provide(state state.IState, oldApi safe.IStateSafeAPI) safe.IStateSafeAPI { 16 if oldApi != nil { 17 // reuse 18 ss := oldApi.(*safeState) 19 ss.state = state 20 if len(ss.keys) > 0 { 21 ss.keys = make([]istructs.IKey, 0, keysCapacity) 22 } 23 if len(ss.keyBuilders) > 0 { 24 ss.keyBuilders = make([]istructs.IStateKeyBuilder, 0, keysBuildersCapacity) 25 } 26 if len(ss.values) > 0 { 27 ss.values = make([]istructs.IStateValue, 0, valuesCapacity) 28 } 29 if len(ss.valueBuilders) > 0 { 30 ss.valueBuilders = make([]istructs.IStateValueBuilder, 0, valueBuildersCapacity) 31 } 32 return ss 33 } 34 return &safeState{ 35 state: state, 36 keyBuilders: make([]istructs.IStateKeyBuilder, keysBuildersCapacity), 37 keys: make([]istructs.IKey, keysCapacity), 38 values: make([]istructs.IStateValue, valuesCapacity), 39 valueBuilders: make([]istructs.IStateValueBuilder, valueBuildersCapacity), 40 } 41 }