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 NORMSWRITER_H
8 #define NORMSWRITER_H
9 
10 #include "InvertedDocEndConsumer.h"
11 
12 namespace Lucene {
13 
14 /// Writes norms.  Each thread X field accumulates the norms for the doc/fields it saw, then the flush method
15 /// below merges all of these together into a single _X.nrm file.
16 class NormsWriter : public InvertedDocEndConsumer {
17 public:
18     NormsWriter();
19     virtual ~NormsWriter();
20 
21     LUCENE_CLASS(NormsWriter);
22 
23 protected:
24     FieldInfosPtr fieldInfos;
25 
26 public:
27     virtual InvertedDocEndConsumerPerThreadPtr addThread(const DocInverterPerThreadPtr& docInverterPerThread);
28     virtual void abort();
29 
30     // We only write the _X.nrm file at flush
31     virtual void files(HashSet<String> files);
32 
33     virtual void setFieldInfos(const FieldInfosPtr& fieldInfos);
34 
35     /// Produce _X.nrm if any document had a field with norms not disabled
36     virtual void flush(MapInvertedDocEndConsumerPerThreadCollectionInvertedDocEndConsumerPerField threadsAndFields, const SegmentWriteStatePtr& state);
37     virtual void closeDocStore(const SegmentWriteStatePtr& state);
38 
39 protected:
40     static uint8_t getDefaultNorm();
41 };
42 
43 }
44 
45 #endif
46