KickJava   Java API By Example, From Geeks To Geeks.

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


1 /*
2  * $Id: ByteVector.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 byte vector with access to the
57  * underlying array.
58  *
59  * @author Carlos Villegas <cav@uniscope.co.jp>
60  */

61 public class ByteVector implements 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 byte[] array;
73
74     /**
75      * Points to next free item
76      */

77     private int n;
78
79     public ByteVector() {
80         this(DEFAULT_BLOCK_SIZE);
81     }
82
83     public ByteVector(int capacity) {
84         if (capacity > 0)
85             BLOCK_SIZE = capacity;
86         else
87             BLOCK_SIZE = DEFAULT_BLOCK_SIZE;
88         array = new byte[BLOCK_SIZE];
89         n = 0;
90     }
91
92     public ByteVector(byte[] a) {
93         BLOCK_SIZE = DEFAULT_BLOCK_SIZE;
94         array = a;
95         n = 0;
96     }
97
98     public ByteVector(byte[] a, int capacity) {
99         if (capacity > 0)
100             BLOCK_SIZE = capacity;
101         else
102             BLOCK_SIZE = DEFAULT_BLOCK_SIZE;
103         array = a;
104         n = 0;
105     }
106
107     public byte[] getArray() {
108         return array;
109     }
110
111     /**
112      * return number of items in array
113      */

114     public int length() {
115         return n;
116     }
117
118     /**
119      * returns current capacity of array
120      */

121     public int capacity() {
122         return array.length;
123     }
124
125     public void put(int index, byte val) {
126         array[index] = val;
127     }
128
129     public byte get(int index) {
130         return array[index];
131     }
132
133     /**
134      * This is to implement memory allocation in the array. Like malloc().
135      */

136     public int alloc(int size) {
137         int index = n;
138         int len = array.length;
139         if (n + size >= len) {
140             byte[] aux = new byte[len + BLOCK_SIZE];
141             System.arraycopy(array, 0, aux, 0, len);
142             array = aux;
143         }
144         n += size;
145         return index;
146     }
147
148     public void trimToSize() {
149         if (n < array.length) {
150             byte[] aux = new byte[n];
151             System.arraycopy(array, 0, aux, 0, n);
152             array = aux;
153         }
154     }
155
156 }
157
Popular Tags