Chromium Code Reviews| Index: impl/memory/context.go |
| diff --git a/impl/memory/context.go b/impl/memory/context.go |
| index 6108e02cbdcbfac51122f37dd97b7dbe2df2b48c..496a343a63d1900ad74f9aed0a2b71a2690ecc3c 100644 |
| --- a/impl/memory/context.go |
| +++ b/impl/memory/context.go |
| @@ -25,10 +25,10 @@ type memContextObj interface { |
| type memContext []memContextObj |
| -var _ = memContextObj((memContext)(nil)) |
| +var _ memContextObj = (*memContext)(nil) |
|
iannucci
2015/12/04 03:35:10
changed to a pointer to be == comparable
|
| -func newMemContext(aid string) memContext { |
| - return memContext{ |
| +func newMemContext(aid string) *memContext { |
| + return &memContext{ |
| newTaskQueueData(), |
| newDataStoreData(aid), |
| } |
| @@ -41,50 +41,50 @@ const ( |
| memContextDSIdx |
| ) |
| -func (m memContext) Get(itm memContextIdx) memContextObj { |
| - return m[itm] |
| +func (m *memContext) Get(itm memContextIdx) memContextObj { |
| + return (*m)[itm] |
| } |
| -func (m memContext) Lock() { |
| - for _, itm := range m { |
| +func (m *memContext) Lock() { |
| + for _, itm := range *m { |
| itm.Lock() |
| } |
| } |
| -func (m memContext) Unlock() { |
| - for i := len(m) - 1; i >= 0; i-- { |
| - m[i].Unlock() |
| +func (m *memContext) Unlock() { |
| + for i := len(*m) - 1; i >= 0; i-- { |
| + (*m)[i].Unlock() |
| } |
| } |
| -func (m memContext) endTxn() { |
| - for _, itm := range m { |
| +func (m *memContext) endTxn() { |
| + for _, itm := range *m { |
| itm.endTxn() |
| } |
| } |
| -func (m memContext) mkTxn(o *ds.TransactionOptions) memContextObj { |
| - ret := make(memContext, len(m)) |
| - for i, itm := range m { |
| +func (m *memContext) mkTxn(o *ds.TransactionOptions) memContextObj { |
| + ret := make(memContext, len(*m)) |
| + for i, itm := range *m { |
| ret[i] = itm.mkTxn(o) |
| } |
| - return ret |
| + return &ret |
| } |
| -func (m memContext) canApplyTxn(txnCtxObj memContextObj) bool { |
| - txnCtx := txnCtxObj.(memContext) |
| - for i := range m { |
| - if !m[i].canApplyTxn(txnCtx[i]) { |
| +func (m *memContext) canApplyTxn(txnCtxObj memContextObj) bool { |
| + txnCtx := *txnCtxObj.(*memContext) |
| + for i := range *m { |
| + if !(*m)[i].canApplyTxn(txnCtx[i]) { |
| return false |
| } |
| } |
| return true |
| } |
| -func (m memContext) applyTxn(c context.Context, txnCtxObj memContextObj) { |
| - txnCtx := txnCtxObj.(memContext) |
| - for i := range m { |
| - m[i].applyTxn(c, txnCtx[i]) |
| +func (m *memContext) applyTxn(c context.Context, txnCtxObj memContextObj) { |
| + txnCtx := *txnCtxObj.(*memContext) |
| + for i := range *m { |
| + (*m)[i].applyTxn(c, txnCtx[i]) |
| } |
| } |
| @@ -113,20 +113,30 @@ func UseWithAppID(c context.Context, aid string) context.Context { |
| if c.Value(memContextKey) != nil { |
| panic(errors.New("memory.Use: called twice on the same Context")) |
| } |
| - c = context.WithValue( |
| - context.WithValue(c, memContextKey, newMemContext(aid)), |
| - giContextKey, &globalInfoData{appid: aid}) |
| + memctx := newMemContext(aid) |
| + c = context.WithValue(c, memContextKey, memctx) |
| + c = context.WithValue(c, memContextNoTxnKey, memctx) |
| + c = context.WithValue(c, giContextKey, &globalInfoData{appid: aid}) |
| + |
| return useTQ(useRDS(useMC(useGI(c, aid)))) |
| } |
| -func cur(c context.Context) (p memContext) { |
| - p, _ = c.Value(memContextKey).(memContext) |
| +func cur(c context.Context) (p *memContext) { |
| + p, _ = c.Value(memContextKey).(*memContext) |
| + return |
| +} |
| + |
| +func curNoTxn(c context.Context) (p *memContext) { |
| + p, _ = c.Value(memContextNoTxnKey).(*memContext) |
| return |
| } |
| type memContextKeyType int |
| -var memContextKey memContextKeyType |
| +var ( |
| + memContextKey memContextKeyType |
| + memContextNoTxnKey memContextKeyType = 1 |
| +) |
| // weird stuff |