Merge pull request #409 from Alkarex/patch-1
[mono.git] / mcs / tools / monkeydoc / Lucene.Net / Lucene.Net / Index / DocFieldConsumersPerThread.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 DocFieldConsumersPerThread:DocFieldConsumerPerThread
24         {
25                 
26                 internal DocFieldConsumerPerThread one;
27                 internal DocFieldConsumerPerThread two;
28                 internal DocFieldConsumers parent;
29                 internal DocumentsWriter.DocState docState;
30                 
31                 public DocFieldConsumersPerThread(DocFieldProcessorPerThread docFieldProcessorPerThread, DocFieldConsumers parent, DocFieldConsumerPerThread one, DocFieldConsumerPerThread two)
32                 {
33                         this.parent = parent;
34                         this.one = one;
35                         this.two = two;
36                         docState = docFieldProcessorPerThread.docState;
37                 }
38                 
39                 public override void  StartDocument()
40                 {
41                         one.StartDocument();
42                         two.StartDocument();
43                 }
44                 
45                 public override void  Abort()
46                 {
47                         try
48                         {
49                                 one.Abort();
50                         }
51                         finally
52                         {
53                                 two.Abort();
54                         }
55                 }
56                 
57                 public override DocumentsWriter.DocWriter FinishDocument()
58                 {
59                         DocumentsWriter.DocWriter oneDoc = one.FinishDocument();
60                         DocumentsWriter.DocWriter twoDoc = two.FinishDocument();
61                         if (oneDoc == null)
62                                 return twoDoc;
63                         else if (twoDoc == null)
64                                 return oneDoc;
65                         else
66                         {
67                                 DocFieldConsumers.PerDoc both = parent.GetPerDoc();
68                                 both.docID = docState.docID;
69                                 System.Diagnostics.Debug.Assert(oneDoc.docID == docState.docID);
70                                 System.Diagnostics.Debug.Assert(twoDoc.docID == docState.docID);
71                                 both.one = oneDoc;
72                                 both.two = twoDoc;
73                                 return both;
74                         }
75                 }
76                 
77                 public override DocFieldConsumerPerField AddField(FieldInfo fi)
78                 {
79                         return new DocFieldConsumersPerField(this, one.AddField(fi), two.AddField(fi));
80                 }
81         }
82 }