KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > fop > hyphenation > CharVector


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 /* $Id: CharVector.java 426576 2006-07-28 15:44:37Z jeremias $ */
19  
20 package org.apache.fop.hyphenation;
21
22 import java.io.Serializable JavaDoc;
23
24 /**
25  * This class implements a simple char vector with access to the
26  * underlying array.
27  *
28  * @author Carlos Villegas <cav@uniscope.co.jp>
29  */

30 public class CharVector implements Cloneable JavaDoc, Serializable JavaDoc {
31
32     /**
33      * Capacity increment size
34      */

35     private static final int DEFAULT_BLOCK_SIZE = 2048;
36     private int blockSize;
37
38     /**
39      * The encapsulated array
40      */

41     private char[] array;
42
43     /**
44      * Points to next free item
45      */

46     private int n;
47
48     public CharVector() {
49         this(DEFAULT_BLOCK_SIZE);
50     }
51
52     public CharVector(int capacity) {
53         if (capacity > 0) {
54             blockSize = capacity;
55         } else {
56             blockSize = DEFAULT_BLOCK_SIZE;
57         }
58         array = new char[blockSize];
59         n = 0;
60     }
61
62     public CharVector(char[] a) {
63         blockSize = DEFAULT_BLOCK_SIZE;
64         array = a;
65         n = a.length;
66     }
67
68     public CharVector(char[] a, int capacity) {
69         if (capacity > 0) {
70             blockSize = capacity;
71         } else {
72             blockSize = DEFAULT_BLOCK_SIZE;
73         }
74         array = a;
75         n = a.length;
76     }
77
78     /**
79      * Reset Vector but don't resize or clear elements
80      */

81     public void clear() {
82         n = 0;
83     }
84
85     public Object JavaDoc clone() {
86         CharVector cv = new CharVector((char[])array.clone(), blockSize);
87         cv.n = this.n;
88         return cv;
89     }
90
91     public char[] getArray() {
92         return array;
93     }
94
95     /**
96      * return number of items in array
97      */

98     public int length() {
99         return n;
100     }
101
102     /**
103      * returns current capacity of array
104      */

105     public int capacity() {
106         return array.length;
107     }
108
109     public void put(int index, char val) {
110         array[index] = val;
111     }
112
113     public char get(int index) {
114         return array[index];
115     }
116
117     public int alloc(int size) {
118         int index = n;
119         int len = array.length;
120         if (n + size >= len) {
121             char[] aux = new char[len + blockSize];
122             System.arraycopy(array, 0, aux, 0, len);
123             array = aux;
124         }
125         n += size;
126         return index;
127     }
128
129     public void trimToSize() {
130         if (n < array.length) {
131             char[] aux = new char[n];
132             System.arraycopy(array, 0, aux, 0, n);
133             array = aux;
134         }
135     }
136
137 }
138
Popular Tags