@@ -206,10 +206,6 @@ pub struct Printer {
206
206
margin : isize ,
207
207
/// Number of spaces left on line
208
208
space : isize ,
209
- /// Index of left side of input stream
210
- left : usize ,
211
- /// Index of right side of input stream
212
- right : usize ,
213
209
/// Ring-buffer of tokens and calculated sizes
214
210
buf : RingBuffer < BufEntry > ,
215
211
/// Running size of stream "...left"
@@ -245,8 +241,6 @@ impl Printer {
245
241
out : String :: new ( ) ,
246
242
margin : linewidth as isize ,
247
243
space : linewidth as isize ,
248
- left : 0 ,
249
- right : 0 ,
250
244
buf : RingBuffer :: new ( ) ,
251
245
left_total : 0 ,
252
246
right_total : 0 ,
@@ -281,45 +275,38 @@ impl Printer {
281
275
if self . scan_stack . is_empty ( ) {
282
276
self . left_total = 1 ;
283
277
self . right_total = 1 ;
284
- self . right = self . left ;
285
278
self . buf . clear ( ) ;
286
- } else {
287
- self . right += 1 ;
288
279
}
289
- self . buf . push ( BufEntry { token : Token :: Begin ( b) , size : -self . right_total } ) ;
290
- self . scan_stack . push_front ( self . right ) ;
280
+ let right = self . buf . push ( BufEntry { token : Token :: Begin ( b) , size : -self . right_total } ) ;
281
+ self . scan_stack . push_front ( right) ;
291
282
}
292
283
293
284
fn scan_end ( & mut self ) {
294
285
if self . scan_stack . is_empty ( ) {
295
286
self . print_end ( ) ;
296
287
} else {
297
- self . right += 1 ;
298
- self . buf . push ( BufEntry { token : Token :: End , size : -1 } ) ;
299
- self . scan_stack . push_front ( self . right ) ;
288
+ let right = self . buf . push ( BufEntry { token : Token :: End , size : -1 } ) ;
289
+ self . scan_stack . push_front ( right) ;
300
290
}
301
291
}
302
292
303
293
fn scan_break ( & mut self , b : BreakToken ) {
304
294
if self . scan_stack . is_empty ( ) {
305
295
self . left_total = 1 ;
306
296
self . right_total = 1 ;
307
- self . right = self . left ;
308
297
self . buf . clear ( ) ;
309
298
} else {
310
299
self . check_stack ( 0 ) ;
311
- self . right += 1 ;
312
300
}
313
- self . buf . push ( BufEntry { token : Token :: Break ( b) , size : -self . right_total } ) ;
314
- self . scan_stack . push_front ( self . right ) ;
301
+ let right = self . buf . push ( BufEntry { token : Token :: Break ( b) , size : -self . right_total } ) ;
302
+ self . scan_stack . push_front ( right) ;
315
303
self . right_total += b. blank_space ;
316
304
}
317
305
318
306
fn scan_string ( & mut self , s : Cow < ' static , str > ) {
319
307
if self . scan_stack . is_empty ( ) {
320
308
self . print_string ( & s) ;
321
309
} else {
322
- self . right += 1 ;
323
310
let len = s. len ( ) as isize ;
324
311
self . buf . push ( BufEntry { token : Token :: String ( s) , size : len } ) ;
325
312
self . right_total += len;
@@ -329,22 +316,22 @@ impl Printer {
329
316
330
317
fn check_stream ( & mut self ) {
331
318
while self . right_total - self . left_total > self . space {
332
- if self . scan_stack . back ( ) == Some ( & self . left ) {
319
+ if * self . scan_stack . back ( ) . unwrap ( ) == self . buf . index_of_first ( ) {
333
320
self . scan_stack . pop_back ( ) . unwrap ( ) ;
334
- self . buf [ self . left ] . size = SIZE_INFINITY ;
321
+ self . buf . first_mut ( ) . unwrap ( ) . size = SIZE_INFINITY ;
335
322
}
336
323
self . advance_left ( ) ;
337
- if self . left == self . right {
324
+ if self . buf . is_empty ( ) {
338
325
break ;
339
326
}
340
327
}
341
328
}
342
329
343
330
fn advance_left ( & mut self ) {
344
- let mut left_size = self . buf [ self . left ] . size ;
331
+ let mut left_size = self . buf . first ( ) . unwrap ( ) . size ;
345
332
346
333
while left_size >= 0 {
347
- let left = self . buf [ self . left ] . token . clone ( ) ;
334
+ let left = self . buf . first ( ) . unwrap ( ) . token . clone ( ) ;
348
335
349
336
let len = match left {
350
337
Token :: Break ( b) => b. blank_space ,
@@ -360,14 +347,12 @@ impl Printer {
360
347
361
348
self . left_total += len;
362
349
363
- if self . left == self . right {
350
+ self . buf . advance_left ( ) ;
351
+ if self . buf . is_empty ( ) {
364
352
break ;
365
353
}
366
354
367
- self . buf . advance_left ( ) ;
368
- self . left += 1 ;
369
-
370
- left_size = self . buf [ self . left ] . size ;
355
+ left_size = self . buf . first ( ) . unwrap ( ) . size ;
371
356
}
372
357
}
373
358
0 commit comments