1 /////////////////////////////////////////////////////////////////////////////
2 // Copyright (c) 2009-2014 Alan Wright. All rights reserved.
3 // Distributable under the terms of either the Apache License (Version 2.0)
4 // or the GNU Lesser General Public License.
5 /////////////////////////////////////////////////////////////////////////////
6 
7 #ifndef MERGEDOCIDREMAPPER_H
8 #define MERGEDOCIDREMAPPER_H
9 
10 #include "LuceneObject.h"
11 
12 namespace Lucene {
13 
14 /// Remaps docIDs after a merge has completed, where the merged segments had at least one deletion.
15 /// This is used to renumber the buffered deletes in IndexWriter when a merge of segments with deletions
16 /// commits.
17 class MergeDocIDRemapper : public LuceneObject {
18 public:
19     MergeDocIDRemapper(const SegmentInfosPtr& infos, Collection< Collection<int32_t> > docMaps, Collection<int32_t> delCounts, const OneMergePtr& merge, int32_t mergedDocCount);
20     virtual ~MergeDocIDRemapper();
21 
22     LUCENE_CLASS(MergeDocIDRemapper);
23 
24 public:
25     Collection<int32_t> starts; // used for binary search of mapped docID
26     Collection<int32_t> newStarts; // starts, minus the deletes
27     Collection< Collection<int32_t> > docMaps; // maps docIDs in the merged set
28     int32_t minDocID; // minimum docID that needs renumbering
29     int32_t maxDocID; // 1+ the max docID that needs renumbering
30     int32_t docShift; // total # deleted docs that were compacted by this merge
31 
32 public:
33     int32_t remap(int32_t oldDocID);
34 };
35 
36 }
37 
38 #endif
39