aboutsummaryrefslogtreecommitdiff
path: root/src/share/classes/com/sun/org/apache/xml/internal/utils/StringVector.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/share/classes/com/sun/org/apache/xml/internal/utils/StringVector.java')
-rw-r--r--src/share/classes/com/sun/org/apache/xml/internal/utils/StringVector.java225
1 files changed, 225 insertions, 0 deletions
diff --git a/src/share/classes/com/sun/org/apache/xml/internal/utils/StringVector.java b/src/share/classes/com/sun/org/apache/xml/internal/utils/StringVector.java
new file mode 100644
index 0000000..0acbbc1
--- /dev/null
+++ b/src/share/classes/com/sun/org/apache/xml/internal/utils/StringVector.java
@@ -0,0 +1,225 @@
+/*
+ * reserved comment block
+ * DO NOT REMOVE OR ALTER!
+ */
+/*
+ * Copyright 1999-2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/*
+ * $Id: StringVector.java,v 1.2.4.1 2005/09/15 08:15:56 suresh_emailid Exp $
+ */
+package com.sun.org.apache.xml.internal.utils;
+
+/**
+ * A very simple table that stores a list of strings, optimized
+ * for small lists.
+ * @xsl.usage internal
+ */
+public class StringVector implements java.io.Serializable
+{
+ static final long serialVersionUID = 4995234972032919748L;
+
+ /** @serial Size of blocks to allocate */
+ protected int m_blocksize;
+
+ /** @serial Array of strings this contains */
+ protected String m_map[];
+
+ /** @serial Number of strings this contains */
+ protected int m_firstFree = 0;
+
+ /** @serial Size of the array */
+ protected int m_mapSize;
+
+ /**
+ * Default constructor. Note that the default
+ * block size is very small, for small lists.
+ */
+ public StringVector()
+ {
+
+ m_blocksize = 8;
+ m_mapSize = m_blocksize;
+ m_map = new String[m_blocksize];
+ }
+
+ /**
+ * Construct a StringVector, using the given block size.
+ *
+ * @param blocksize Size of the blocks to allocate
+ */
+ public StringVector(int blocksize)
+ {
+
+ m_blocksize = blocksize;
+ m_mapSize = blocksize;
+ m_map = new String[blocksize];
+ }
+
+ /**
+ * Get the length of the list.
+ *
+ * @return Number of strings in the list
+ */
+ public int getLength()
+ {
+ return m_firstFree;
+ }
+
+ /**
+ * Get the length of the list.
+ *
+ * @return Number of strings in the list
+ */
+ public final int size()
+ {
+ return m_firstFree;
+ }
+
+ /**
+ * Append a string onto the vector.
+ *
+ * @param value Sting to add to the vector
+ */
+ public final void addElement(String value)
+ {
+
+ if ((m_firstFree + 1) >= m_mapSize)
+ {
+ m_mapSize += m_blocksize;
+
+ String newMap[] = new String[m_mapSize];
+
+ System.arraycopy(m_map, 0, newMap, 0, m_firstFree + 1);
+
+ m_map = newMap;
+ }
+
+ m_map[m_firstFree] = value;
+
+ m_firstFree++;
+ }
+
+ /**
+ * Get the nth element.
+ *
+ * @param i Index of string to find
+ *
+ * @return String at given index
+ */
+ public final String elementAt(int i)
+ {
+ return m_map[i];
+ }
+
+ /**
+ * Tell if the table contains the given string.
+ *
+ * @param s String to look for
+ *
+ * @return True if the string is in this table
+ */
+ public final boolean contains(String s)
+ {
+
+ if (null == s)
+ return false;
+
+ for (int i = 0; i < m_firstFree; i++)
+ {
+ if (m_map[i].equals(s))
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Tell if the table contains the given string. Ignore case.
+ *
+ * @param s String to find
+ *
+ * @return True if the String is in this vector
+ */
+ public final boolean containsIgnoreCase(String s)
+ {
+
+ if (null == s)
+ return false;
+
+ for (int i = 0; i < m_firstFree; i++)
+ {
+ if (m_map[i].equalsIgnoreCase(s))
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Tell if the table contains the given string.
+ *
+ * @param s String to push into the vector
+ */
+ public final void push(String s)
+ {
+
+ if ((m_firstFree + 1) >= m_mapSize)
+ {
+ m_mapSize += m_blocksize;
+
+ String newMap[] = new String[m_mapSize];
+
+ System.arraycopy(m_map, 0, newMap, 0, m_firstFree + 1);
+
+ m_map = newMap;
+ }
+
+ m_map[m_firstFree] = s;
+
+ m_firstFree++;
+ }
+
+ /**
+ * Pop the tail of this vector.
+ *
+ * @return The String last added to this vector or null not found.
+ * The string is removed from the vector.
+ */
+ public final String pop()
+ {
+
+ if (m_firstFree <= 0)
+ return null;
+
+ m_firstFree--;
+
+ String s = m_map[m_firstFree];
+
+ m_map[m_firstFree] = null;
+
+ return s;
+ }
+
+ /**
+ * Get the string at the tail of this vector without popping.
+ *
+ * @return The string at the tail of this vector.
+ */
+ public final String peek()
+ {
+ return (m_firstFree <= 0) ? null : m_map[m_firstFree - 1];
+ }
+}