KickJava   Java API By Example, From Geeks To Geeks.

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


1 /*
2  * $Id: CharVector.java,v 1.3.2.1 2003/02/25 14:07:10 jeremias Exp $
3  * ============================================================================
4  * The Apache Software License, Version 1.1
5  * ============================================================================
6  *
7  * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without modifica-
10  * tion, are permitted provided that the following conditions are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright notice,
13  * this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright notice,
16  * this list of conditions and the following disclaimer in the documentation
17  * and/or other materials provided with the distribution.
18  *
19  * 3. The end-user documentation included with the redistribution, if any, must
20  * include the following acknowledgment: "This product includes software
21  * developed by the Apache Software Foundation (http://www.apache.org/)."
22  * Alternately, this acknowledgment may appear in the software itself, if
23  * and wherever such third-party acknowledgments normally appear.
24  *
25  * 4. The names "FOP" and "Apache Software Foundation" must not be used to
26  * endorse or promote products derived from this software without prior
27  * written permission. For written permission, please contact
28  * apache@apache.org.
29  *
30  * 5. Products derived from this software may not be called "Apache", nor may
31  * "Apache" appear in their name, without prior written permission of the
32  * Apache Software Foundation.
33  *
34  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
35  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
36  * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
37  * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
38  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
39  * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
40  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
41  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
42  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
43  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
44  * ============================================================================
45  *
46  * This software consists of voluntary contributions made by many individuals
47  * on behalf of the Apache Software Foundation and was originally created by
48  * James Tauber <jtauber@jtauber.com>. For more information on the Apache
49  * Software Foundation, please see <http://www.apache.org/>.
50  */

51 package org.apache.fop.layout.hyphenation;
52
53 import java.io.Serializable JavaDoc;
54
55 /**
56  * This class implements a simple char vector with access to the
57  * underlying array.
58  *
59  * @author Carlos Villegas <cav@uniscope.co.jp>
60  */

61 public class CharVector implements Cloneable JavaDoc, Serializable JavaDoc {
62
63     /**
64      * Capacity increment size
65      */

66     private static final int DEFAULT_BLOCK_SIZE = 2048;
67     private int BLOCK_SIZE;
68
69     /**
70      * The encapsulated array
71      */

72     private char[] array;
73
74     /**
75      * Points to next free item
76      */

77     private int n;
78
79     public CharVector() {
80         this(DEFAULT_BLOCK_SIZE);
81     }
82
83     public CharVector(int capacity) {
84         if (capacity > 0)
85             BLOCK_SIZE = capacity;
86         else
87             BLOCK_SIZE = DEFAULT_BLOCK_SIZE;
88         array = new char[BLOCK_SIZE];
89         n = 0;
90     }
91
92     public CharVector(char[] a) {
93         BLOCK_SIZE = DEFAULT_BLOCK_SIZE;
94         array = a;
95         n = a.length;
96     }
97
98     public CharVector(char[] a, int capacity) {
99         if (capacity > 0)
100             BLOCK_SIZE = capacity;
101         else
102             BLOCK_SIZE = DEFAULT_BLOCK_SIZE;
103         array = a;
104         n = a.length;
105     }
106
107     /**
108      * Reset Vector but don't resize or clear elements
109      */

110     public void clear() {
111         n = 0;
112     }
113
114     public Object JavaDoc clone() {
115         CharVector cv = new CharVector((char[])array.clone(), BLOCK_SIZE);
116         cv.n = this.n;
117         return cv;
118     }
119
120     public char[] getArray() {
121         return array;
122     }
123
124     /**
125      * return number of items in array
126      */

127     public int length() {
128         return n;
129     }
130
131     /**
132      * returns current capacity of array
133      */

134     public int capacity() {
135         return array.length;
136     }
137
138     public void put(int index, char val) {
139         array[index] = val;
140     }
141
142     public char get(int index) {
143         return array[index];
144     }
145
146     public int alloc(int size) {
147         int index = n;
148         int len = array.length;
149         if (n + size >= len) {
150             char[] aux = new char[len + BLOCK_SIZE];
151             System.arraycopy(array, 0, aux, 0, len);
152             array = aux;
153         }
154         n += size;
155         return index;
156     }
157
158     public void trimToSize() {
159         if (n < array.length) {
160             char[] aux = new char[n];
161             System.arraycopy(array, 0, aux, 0, n);
162             array = aux;
163         }
164     }
165
166 }
167
Popular Tags