github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/baseapp/baseapp_synclist.go (about) 1 package baseapp 2 3 import ( 4 "container/list" 5 "sync" 6 7 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store/types" 8 ) 9 10 type cacheRWSetList struct { 11 mtx sync.Mutex 12 mps *list.List 13 } 14 15 func newCacheRWSetList() *cacheRWSetList { 16 return &cacheRWSetList{ 17 mps: list.New(), 18 } 19 } 20 21 func (c *cacheRWSetList) Len() int { 22 c.mtx.Lock() 23 defer c.mtx.Unlock() 24 return c.mps.Len() 25 } 26 27 func (c *cacheRWSetList) PutRwSet(rw types.MsRWSet) { 28 c.mtx.Lock() 29 defer c.mtx.Unlock() 30 c.mps.PushBack(rw) 31 } 32 33 func (c *cacheRWSetList) GetRWSet() types.MsRWSet { 34 c.mtx.Lock() 35 defer c.mtx.Unlock() 36 37 if c.mps.Len() > 0 { 38 front := c.mps.Remove(c.mps.Front()) 39 return front.(types.MsRWSet) 40 } 41 42 return make(types.MsRWSet) 43 } 44 45 func (c *cacheRWSetList) Range(cb func(c types.MsRWSet)) { 46 c.mtx.Lock() 47 for i := c.mps.Front(); i != nil; i = i.Next() { 48 cb(i.Value.(types.MsRWSet)) 49 } 50 c.mtx.Unlock() 51 } 52 53 func (c *cacheRWSetList) Clear() { 54 c.mtx.Lock() 55 c.mps.Init() 56 c.mtx.Unlock() 57 } 58 59 type cacheMultiStoreList struct { 60 mtx sync.Mutex 61 stores *list.List 62 } 63 64 func newCacheMultiStoreList() *cacheMultiStoreList { 65 return &cacheMultiStoreList{ 66 stores: list.New(), 67 } 68 } 69 70 func (c *cacheMultiStoreList) Len() int { 71 c.mtx.Lock() 72 73 defer c.mtx.Unlock() 74 return c.stores.Len() 75 76 } 77 78 func (c *cacheMultiStoreList) PushStores(stores map[int]types.CacheMultiStore) { 79 c.mtx.Lock() 80 for _, v := range stores { 81 c.stores.PushBack(v) 82 } 83 c.mtx.Unlock() 84 } 85 86 func (c *cacheMultiStoreList) PushStore(store types.CacheMultiStore) { 87 c.mtx.Lock() 88 c.stores.PushBack(store) 89 c.mtx.Unlock() 90 } 91 92 func (c *cacheMultiStoreList) Range(cb func(c types.CacheMultiStore)) { 93 c.mtx.Lock() 94 for i := c.stores.Front(); i != nil; i = i.Next() { 95 cb(i.Value.(types.CacheMultiStore)) 96 } 97 c.mtx.Unlock() 98 } 99 100 func (c *cacheMultiStoreList) GetStoreWithParent(parent types.CacheMultiStore) types.CacheMultiStore { 101 c.mtx.Lock() 102 if c.stores.Len() > 0 { 103 front := c.stores.Remove(c.stores.Front()).(types.CacheMultiStore) 104 c.mtx.Unlock() 105 front.(types.CacheMultiStoreResetter).Reset(parent) 106 return front 107 108 } 109 c.mtx.Unlock() 110 return parent.CacheMultiStore() 111 } 112 113 func (c *cacheMultiStoreList) GetStore() types.CacheMultiStore { 114 c.mtx.Lock() 115 if c.stores.Len() > 0 { 116 front := c.stores.Remove(c.stores.Front()) 117 c.mtx.Unlock() 118 return front.(types.CacheMultiStore) 119 } 120 c.mtx.Unlock() 121 return nil 122 } 123 124 func (c *cacheMultiStoreList) Clear() { 125 c.mtx.Lock() 126 c.stores.Init() 127 c.mtx.Unlock() 128 }