package railo.commons.lang;
import java.util.ArrayList;
/**
* a Simple single direction string list
*/
public final class StringList {
private final Entry root=new Entry(null,Entry.NUL);
private Entry curr;
private int count=0;
/**
* constructor of the class
*/
public StringList() {
curr=root;
}
/**
* constructor of the class
* @param str String Element
*/
public StringList(String str) {
root.next=new Entry(str,Entry.NUL);
curr=root.next;
count=1;
}
/**
* constructor of the class, initalize with 2 values
* @param str1
* @param str2
*/
public StringList(String str1, String str2) {
this(str1);
add(str2);
}
/**
* @return returns if List has a next Element
*/
public boolean hasNext() {
return curr.next!=null;
}
/**
* @return returns if List has a next Element
*/
public boolean hasNextNext() {
return curr.next!=null && curr.next.next!=null;
}
/**
* @return returns next element in the list
*/
public String next() {
curr=curr.next;
return curr.data;
}
public char delimiter() {
return curr.delimiter;
}
/**
* @return returns current element in the list
*/
public String current() {
return curr.data;
}
/**
* reset the String List
* @return
*/
public StringList reset() {
curr=root;
return this;
}
/**
* @return returns the size of the list
*/
public int size() {
return count;
}
/**
* adds a element to the list
* @param str String Element to add
*/
public void add(String str) {
curr.next=new Entry(str,Entry.NUL);
curr=curr.next;
count++;
}
public void add(String str, char delimiter) {
curr.next=new Entry(str,delimiter);
curr=curr.next;
count++;
}
private class Entry {
private static final char NUL=(char)0;
private Entry next;
private String data;
private char delimiter;
private Entry(String data, char delimiter) {
this.data=data;
this.delimiter=delimiter;
}
}
public String[] toArray() {
ArrayList<String> list=new ArrayList<String>();
while(hasNext()){
list.add(next());
}
return list.toArray(new String[list.size()]);
}
}