package org.basex.util.list; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import org.basex.util.Array; import org.basex.util.Util; /** * This is a simple container for strings. * * @author BaseX Team 2005-12, BSD License * @author Christian Gruen */ public class StringList extends ElementList implements Iterable<String> { /** Element container. */ protected String[] list; /** * Default constructor. */ public StringList() { this(CAP); } /** * Constructor, specifying an initial array capacity. * @param c array capacity */ public StringList(final int c) { list = new String[c]; } /** * Adds an element to the array. * @param e element to be added * @return self reference */ public final StringList add(final String e) { if(size == list.length) list = Array.copyOf(list, newSize()); list[size++] = e; return this; } /** * Adds elements to the array. * @param e element to be added * @return self reference */ public final StringList add(final String[] e) { for(final String s : e) add(s); return this; } /** * Returns the specified element. * @param p position * @return value */ public final String get(final int p) { return list[p]; } /** * Checks if the specified element is found in the list. * @param e element to be checked * @return result of check */ public final boolean contains(final String e) { for(int i = 0; i < size; ++i) if(list[i].equals(e)) return true; return false; } /** * Deletes the specified element. * @param i element to be deleted */ public final void delete(final int i) { Array.move(list, i + 1, -1, --size - i); } /** * Returns an array with all elements. * @return array */ public final String[] toArray() { return Array.copyOf(list, size); } /** * Sorts the elements. * @param cs respect case sensitivity * @param asc ascending/descending flag */ public final void sort(final boolean cs, final boolean asc) { sort(cs, asc, 0); } /** * Sorts the elements. * @param cs respect case sensitivity * @param asc ascending/descending flag * @param pos position where sorting starts */ public final void sort(final boolean cs, final boolean asc, final int pos) { final Comparator<String> comp = cs ? null : String.CASE_INSENSITIVE_ORDER; Arrays.sort(list, pos, size, asc ? comp : Collections.reverseOrder(comp)); } @Override public final Iterator<String> iterator() { return new Iterator<String>() { private int c; @Override public boolean hasNext() { return c < size; } @Override public String next() { return list[c++]; } @Override public void remove() { Util.notexpected(); } }; } }