Lucene.Net  3.0.3
Lucene.Net is a port of the Lucene search engine library, written in C# and targeted at .NET runtime users.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Properties Pages
StoredFieldsWriterPerThread.cs
Go to the documentation of this file.
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements. See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License. You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 using System;
19 using Lucene.Net.Documents;
20 using IndexOutput = Lucene.Net.Store.IndexOutput;
21 
22 namespace Lucene.Net.Index
23 {
24 
26  {
27 
28  internal FieldsWriter localFieldsWriter;
29  internal StoredFieldsWriter storedFieldsWriter;
30  internal DocumentsWriter.DocState docState;
31 
32  internal StoredFieldsWriter.PerDoc doc;
33 
34  public StoredFieldsWriterPerThread(DocumentsWriter.DocState docState, StoredFieldsWriter storedFieldsWriter)
35  {
36  this.storedFieldsWriter = storedFieldsWriter;
37  this.docState = docState;
38  localFieldsWriter = new FieldsWriter((IndexOutput) null, (IndexOutput) null, storedFieldsWriter.fieldInfos);
39  }
40 
41  public void StartDocument()
42  {
43  if (doc != null)
44  {
45  // Only happens if previous document hit non-aborting
46  // exception while writing stored fields into
47  // localFieldsWriter:
48  doc.Reset();
49  doc.docID = docState.docID;
50  }
51  }
52 
53  public void AddField(IFieldable field, FieldInfo fieldInfo)
54  {
55  if (doc == null)
56  {
57  doc = storedFieldsWriter.GetPerDoc();
58  doc.docID = docState.docID;
59  localFieldsWriter.SetFieldsStream(doc.fdt);
60  System.Diagnostics.Debug.Assert(doc.numStoredFields == 0, "doc.numStoredFields=" + doc.numStoredFields);
61  System.Diagnostics.Debug.Assert(0 == doc.fdt.Length);
62  System.Diagnostics.Debug.Assert(0 == doc.fdt.FilePointer);
63  }
64 
65  localFieldsWriter.WriteField(fieldInfo, field);
66  System.Diagnostics.Debug.Assert(docState.TestPoint("StoredFieldsWriterPerThread.processFields.writeField"));
67  doc.numStoredFields++;
68  }
69 
70  public DocumentsWriter.DocWriter FinishDocument()
71  {
72  // If there were any stored fields in this doc, doc will
73  // be non-null; else it's null.
74  try
75  {
76  return doc;
77  }
78  finally
79  {
80  doc = null;
81  }
82  }
83 
84  public void Abort()
85  {
86  if (doc != null)
87  {
88  doc.Abort();
89  doc = null;
90  }
91  }
92  }
93 }