@@ -407,7 +407,7 @@ class TSortableBatchPosition {
407
407
class TIntervalPosition {
408
408
private:
409
409
TSortableBatchPosition Position;
410
- const bool LeftIntervalInclude;
410
+ bool LeftIntervalInclude;
411
411
public:
412
412
const TSortableBatchPosition& GetPosition () const {
413
413
return Position;
@@ -459,21 +459,41 @@ class TIntervalPositions {
459
459
return Positions.end ();
460
460
}
461
461
462
- void AddPosition (TSortableBatchPosition&& position, const bool includeLeftInterval) {
463
- TIntervalPosition intervalPosition (std::move (position), includeLeftInterval);
464
- if (Positions.size ()) {
465
- AFL_VERIFY (Positions.back () < intervalPosition)(" back" , Positions.back ().DebugJson ())(" pos" , intervalPosition.DebugJson ());
466
- }
462
+ void InsertPosition (TIntervalPosition&& intervalPosition) {
467
463
Positions.emplace_back (std::move (intervalPosition));
464
+ ui32 index = Positions.size () - 1 ;
465
+ while (index >= 1 && Positions[index] < Positions[index - 1 ]) {
466
+ std::swap (Positions[index], Positions[index - 1 ]);
467
+ index = index - 1 ;
468
+ }
469
+ }
470
+
471
+ void InsertPosition (TSortableBatchPosition&& position, const bool includePositionToLeftInterval) {
472
+ TIntervalPosition intervalPosition (std::move (position), includePositionToLeftInterval);
473
+ InsertPosition (std::move (intervalPosition));
468
474
}
469
475
470
- void AddPosition (const TSortableBatchPosition& position, const bool includeLeftInterval) {
471
- TIntervalPosition intervalPosition (position, includeLeftInterval);
476
+ void InsertPosition (const TSortableBatchPosition& position, const bool includePositionToLeftInterval) {
477
+ TIntervalPosition intervalPosition (position, includePositionToLeftInterval);
478
+ InsertPosition (std::move (intervalPosition));
479
+ }
480
+
481
+ void AddPosition (TIntervalPosition&& intervalPosition) {
472
482
if (Positions.size ()) {
473
483
AFL_VERIFY (Positions.back () < intervalPosition)(" back" , Positions.back ().DebugJson ())(" pos" , intervalPosition.DebugJson ());
474
484
}
475
485
Positions.emplace_back (std::move (intervalPosition));
476
486
}
487
+
488
+ void AddPosition (TSortableBatchPosition&& position, const bool includePositionToLeftInterval) {
489
+ TIntervalPosition intervalPosition (std::move (position), includePositionToLeftInterval);
490
+ AddPosition (std::move (intervalPosition));
491
+ }
492
+
493
+ void AddPosition (const TSortableBatchPosition& position, const bool includePositionToLeftInterval) {
494
+ TIntervalPosition intervalPosition (position, includePositionToLeftInterval);
495
+ AddPosition (std::move (intervalPosition));
496
+ }
477
497
};
478
498
479
499
class TRWSortableBatchPosition : public TSortableBatchPosition , public TMoveOnly {
0 commit comments