github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/tm2/pkg/store/cachemulti/store.go (about)

     1  package cachemulti
     2  
     3  import (
     4  	"github.com/gnolang/gno/tm2/pkg/store/types"
     5  )
     6  
     7  //----------------------------------------
     8  // Store
     9  
    10  // Store holds many cache-wrapped stores.
    11  // Implements MultiStore.
    12  // NOTE: a Store (and MultiStores in general) should never expose the
    13  // keys for the substores.
    14  type Store struct {
    15  	stores map[types.StoreKey]types.Store
    16  	keys   map[string]types.StoreKey
    17  }
    18  
    19  var _ types.MultiStore = Store{}
    20  
    21  func NewFromStores(
    22  	stores map[types.StoreKey]types.Store,
    23  	keys map[string]types.StoreKey,
    24  ) Store {
    25  	cms := Store{
    26  		stores: make(map[types.StoreKey]types.Store, len(stores)),
    27  		keys:   keys,
    28  	}
    29  
    30  	for key, store := range stores {
    31  		cms.stores[key] = store.CacheWrap()
    32  	}
    33  
    34  	return cms
    35  }
    36  
    37  func New(
    38  	stores map[types.StoreKey]types.Store,
    39  	keys map[string]types.StoreKey,
    40  ) Store {
    41  	return NewFromStores(stores, keys)
    42  }
    43  
    44  func newStoreFromCMS(cms Store) Store {
    45  	stores := make(map[types.StoreKey]types.Store)
    46  	for k, v := range cms.stores {
    47  		stores[k] = v
    48  	}
    49  	return NewFromStores(stores, nil)
    50  }
    51  
    52  // MultiWrite calls Write on each underlying store.
    53  func (cms Store) MultiWrite() {
    54  	for _, store := range cms.stores {
    55  		store.Write()
    56  	}
    57  }
    58  
    59  // Implements MultiStore.
    60  func (cms Store) MultiCacheWrap() types.MultiStore {
    61  	return newStoreFromCMS(cms)
    62  }
    63  
    64  // GetStore returns an underlying Store by key.
    65  func (cms Store) GetStore(key types.StoreKey) types.Store {
    66  	return cms.stores[key].(types.Store)
    67  }