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  }