11package rangesync
22
33import (
4- "context"
54 "crypto/md5"
65 "errors"
76 "slices"
@@ -95,7 +94,7 @@ type dumbSet struct {
9594
9695var _ OrderedSet = & dumbSet {}
9796
98- func (ds * dumbSet ) Receive (ctx context. Context , id types.KeyBytes ) error {
97+ func (ds * dumbSet ) Receive (id types.KeyBytes ) error {
9998 if len (ds .keys ) == 0 {
10099 ds .keys = []types.KeyBytes {id }
101100 return nil
@@ -124,22 +123,25 @@ func (ds *dumbSet) Receive(ctx context.Context, id types.KeyBytes) error {
124123 return nil
125124}
126125
127- func (ds * dumbSet ) seq (n int ) types.Seq {
126+ func (ds * dumbSet ) seq (n int ) types.SeqResult {
128127 if n < 0 || n > len (ds .keys ) {
129128 panic ("bad index" )
130129 }
131- return types .Seq (func (yield func (types.KeyBytes , error ) bool ) {
132- n := n // make the sequence reusable
133- for {
134- if ! yield (ds .keys [n ], nil ) {
135- break
130+ return types.SeqResult {
131+ Seq : types .Seq (func (yield func (types.KeyBytes ) bool ) {
132+ n := n // make the sequence reusable
133+ for {
134+ if ! yield (ds .keys [n ]) {
135+ break
136+ }
137+ n = (n + 1 ) % len (ds .keys )
136138 }
137- n = ( n + 1 ) % len ( ds . keys )
138- }
139- })
139+ }),
140+ Error : types . NoSeqError ,
141+ }
140142}
141143
142- func (ds * dumbSet ) seqFor (s types.KeyBytes ) types.Seq {
144+ func (ds * dumbSet ) seqFor (s types.KeyBytes ) types.SeqResult {
143145 n := slices .IndexFunc (ds .keys , func (k types.KeyBytes ) bool {
144146 return k .Compare (s ) == 0
145147 })
@@ -150,7 +152,6 @@ func (ds *dumbSet) seqFor(s types.KeyBytes) types.Seq {
150152}
151153
152154func (ds * dumbSet ) getRangeInfo (
153- _ context.Context ,
154155 x , y types.KeyBytes ,
155156 count int ,
156157) (r RangeInfo , end types.KeyBytes , err error ) {
@@ -179,35 +180,29 @@ func (ds *dumbSet) getRangeInfo(
179180 panic ("empty start/end from naiveRange" )
180181 }
181182 r .Items = ds .seqFor (start )
183+ } else {
184+ r .Items = types .EmptySeqResult ()
182185 }
183186 return r , end , nil
184187}
185188
186- func (ds * dumbSet ) GetRangeInfo (
187- ctx context.Context ,
188- x , y types.KeyBytes ,
189- count int ,
190- ) (RangeInfo , error ) {
191- ri , _ , err := ds .getRangeInfo (ctx , x , y , count )
189+ func (ds * dumbSet ) GetRangeInfo (x , y types.KeyBytes , count int ) (RangeInfo , error ) {
190+ ri , _ , err := ds .getRangeInfo (x , y , count )
192191 return ri , err
193192}
194193
195- func (ds * dumbSet ) SplitRange (
196- ctx context.Context ,
197- x , y types.KeyBytes ,
198- count int ,
199- ) (SplitInfo , error ) {
194+ func (ds * dumbSet ) SplitRange (x , y types.KeyBytes , count int ) (SplitInfo , error ) {
200195 if count <= 0 {
201196 panic ("BUG: bad split count" )
202197 }
203- part0 , middle , err := ds .getRangeInfo (ctx , x , y , count )
198+ part0 , middle , err := ds .getRangeInfo (x , y , count )
204199 if err != nil {
205200 return SplitInfo {}, err
206201 }
207202 if part0 .Count == 0 {
208203 return SplitInfo {}, errors .New ("can't split empty range" )
209204 }
210- part1 , err := ds .GetRangeInfo (ctx , middle , y , - 1 )
205+ part1 , err := ds .GetRangeInfo (middle , y , - 1 )
211206 if err != nil {
212207 return SplitInfo {}, err
213208 }
@@ -217,23 +212,23 @@ func (ds *dumbSet) SplitRange(
217212 }, nil
218213}
219214
220- func (ds * dumbSet ) Empty (ctx context. Context ) (bool , error ) {
215+ func (ds * dumbSet ) Empty () (bool , error ) {
221216 return len (ds .keys ) == 0 , nil
222217}
223218
224- func (ds * dumbSet ) Items (ctx context. Context ) ( types.Seq , error ) {
219+ func (ds * dumbSet ) Items () types.SeqResult {
225220 if len (ds .keys ) == 0 {
226- return types .EmptySeq (), nil
221+ return types .EmptySeqResult ()
227222 }
228- return ds .seq (0 ), nil
223+ return ds .seq (0 )
229224}
230225
231- func (ds * dumbSet ) Copy () OrderedSet {
226+ func (ds * dumbSet ) Copy (syncScope bool ) OrderedSet {
232227 return & dumbSet {keys : slices .Clone (ds .keys )}
233228}
234229
235- func (ds * dumbSet ) Recent (ctx context. Context , since time.Time ) (types.Seq , int , error ) {
236- return nil , 0 , nil
230+ func (ds * dumbSet ) Recent (since time.Time ) (types.SeqResult , int ) {
231+ return types . EmptySeqResult () , 0
237232}
238233
239234var hashPool = & sync.Pool {
@@ -267,7 +262,7 @@ type deferredAddSet struct {
267262 added map [string ]struct {}
268263}
269264
270- func (das * deferredAddSet ) Receive (ctx context. Context , id types.KeyBytes ) error {
265+ func (das * deferredAddSet ) Receive (id types.KeyBytes ) error {
271266 if das .added == nil {
272267 das .added = make (map [string ]struct {})
273268 }
@@ -276,9 +271,8 @@ func (das *deferredAddSet) Receive(ctx context.Context, id types.KeyBytes) error
276271}
277272
278273func (das * deferredAddSet ) addAll () error {
279- ctx := context .Background ()
280274 for k := range das .added {
281- if err := das .OrderedSet .Receive (ctx , types .KeyBytes (k )); err != nil {
275+ if err := das .OrderedSet .Receive (types .KeyBytes (k )); err != nil {
282276 return err
283277 }
284278 }
0 commit comments