Merge pull request #409 from Alkarex/patch-1
[mono.git] / mcs / tools / monkeydoc / Lucene.Net / Lucene.Net / Index / FormatPostingsTermsWriter.cs
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
20 namespace Mono.Lucene.Net.Index
21 {
22         
23         sealed class FormatPostingsTermsWriter:FormatPostingsTermsConsumer
24         {
25                 
26                 internal FormatPostingsFieldsWriter parent;
27                 internal FormatPostingsDocsWriter docsWriter;
28                 internal TermInfosWriter termsOut;
29                 internal FieldInfo fieldInfo;
30                 
31                 internal FormatPostingsTermsWriter(SegmentWriteState state, FormatPostingsFieldsWriter parent):base()
32                 {
33                         this.parent = parent;
34                         termsOut = parent.termsOut;
35                         docsWriter = new FormatPostingsDocsWriter(state, this);
36                 }
37                 
38                 internal void  SetField(FieldInfo fieldInfo)
39                 {
40                         this.fieldInfo = fieldInfo;
41                         docsWriter.SetField(fieldInfo);
42                 }
43                 
44                 internal char[] currentTerm;
45                 internal int currentTermStart;
46                 
47                 internal long freqStart;
48                 internal long proxStart;
49                 
50                 /// <summary>Adds a new term in this field </summary>
51                 internal override FormatPostingsDocsConsumer AddTerm(char[] text, int start)
52                 {
53                         currentTerm = text;
54                         currentTermStart = start;
55                         
56                         // TODO: this is abstraction violation -- ideally this
57                         // terms writer is not so "invasive", looking for file
58                         // pointers in its child consumers.
59                         freqStart = docsWriter.out_Renamed.GetFilePointer();
60                         if (docsWriter.posWriter.out_Renamed != null)
61                                 proxStart = docsWriter.posWriter.out_Renamed.GetFilePointer();
62                         
63                         parent.skipListWriter.ResetSkip();
64                         
65                         return docsWriter;
66                 }
67                 
68                 /// <summary>Called when we are done adding terms to this field </summary>
69                 internal override void  Finish()
70                 {
71                 }
72                 
73                 internal void  Close()
74                 {
75                         docsWriter.Close();
76                 }
77         }
78 }