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