File tree Expand file tree Collapse file tree 1 file changed +29
-2
lines changed
Expand file tree Collapse file tree 1 file changed +29
-2
lines changed Original file line number Diff line number Diff line change @@ -91,8 +91,18 @@ func (t *memoryTable) truncateHead(items uint64) error {
9191 if items < t .offset {
9292 return errors .New ("truncation below tail" )
9393 }
94- t .data = t .data [:items - t .offset ]
94+ removeFrom := items - t .offset
95+ var removed uint64
96+ for i := removeFrom ; i < uint64 (len (t .data )); i ++ {
97+ removed += uint64 (len (t .data [i ]))
98+ }
99+ t .data = t .data [:removeFrom ]
95100 t .items = items
101+ if removed >= t .size {
102+ t .size = 0
103+ } else {
104+ t .size -= removed
105+ }
96106 return nil
97107}
98108
@@ -108,8 +118,25 @@ func (t *memoryTable) truncateTail(items uint64) error {
108118 if t .items < items {
109119 return errors .New ("truncation above head" )
110120 }
111- t .data = t .data [items - t .offset :]
121+ drop := items - t .offset
122+ var removed uint64
123+ for i := uint64 (0 ); i < drop ; i ++ {
124+ removed += uint64 (len (t .data [i ]))
125+ }
126+ newLen := uint64 (len (t .data )) - drop
127+ if newLen == 0 {
128+ t .data = nil
129+ } else {
130+ newData := make ([][]byte , newLen )
131+ copy (newData , t .data [drop :])
132+ t .data = newData
133+ }
112134 t .offset = items
135+ if removed >= t .size {
136+ t .size = 0
137+ } else {
138+ t .size -= removed
139+ }
113140 return nil
114141}
115142
You can’t perform that action at this time.
0 commit comments