add --shared
[pylucene.git] / lucene-java-3.4.0 / lucene / src / java / org / apache / lucene / index / CharBlockPool.java
1 package org.apache.lucene.index;
2
3 /**
4  * Licensed to the Apache Software Foundation (ASF) under one or more
5  * contributor license agreements.  See the NOTICE file distributed with
6  * this work for additional information regarding copyright ownership.
7  * The ASF licenses this file to You under the Apache License, Version 2.0
8  * (the "License"); you may not use this file except in compliance with
9  * the License.  You may obtain a copy of the License at
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19
20 import static org.apache.lucene.util.RamUsageEstimator.NUM_BYTES_OBJECT_REF;
21 import org.apache.lucene.util.ArrayUtil;
22
23 final class CharBlockPool {
24
25   public char[][] buffers = new char[10][];
26   int numBuffer;
27
28   int bufferUpto = -1;                        // Which buffer we are upto
29   public int charUpto = DocumentsWriter.CHAR_BLOCK_SIZE;             // Where we are in head buffer
30
31   public char[] buffer;                              // Current head buffer
32   public int charOffset = -DocumentsWriter.CHAR_BLOCK_SIZE;          // Current head offset
33   final private DocumentsWriter docWriter;
34
35   public CharBlockPool(DocumentsWriter docWriter) {
36     this.docWriter = docWriter;
37   }
38
39   public void reset() {
40     docWriter.recycleCharBlocks(buffers, 1+bufferUpto);
41     bufferUpto = -1;
42     charUpto = DocumentsWriter.CHAR_BLOCK_SIZE;
43     charOffset = -DocumentsWriter.CHAR_BLOCK_SIZE;
44   }
45
46   public void nextBuffer() {
47     if (1+bufferUpto == buffers.length) {
48       char[][] newBuffers = new char[ArrayUtil.oversize(buffers.length+1,
49                                                         NUM_BYTES_OBJECT_REF)][];
50       System.arraycopy(buffers, 0, newBuffers, 0, buffers.length);
51       buffers = newBuffers;
52     }
53     buffer = buffers[1+bufferUpto] = docWriter.getCharBlock();
54     bufferUpto++;
55
56     charUpto = 0;
57     charOffset += DocumentsWriter.CHAR_BLOCK_SIZE;
58   }
59 }
60