// File: LetterQueue.java
// Time-stamp: "2006-01-23 21:12:29 calvanese"
// Purpose: Written exam 2/2/2005 - BSc in Computer Science (6CFU)
//          solution part 1

public class LetterQueue {

  // representation of the objects
  private String city;
  private String[] queue;
  private int nextPos;

  // pubblic methods

  public LetterQueue(String c, int size) {
    city = c;
    queue = new String[size];
    nextPos = 0;
  }
  
  public String getCity() {
    return city;
  }
  
  public int size() {
    return queue.length;
  }
  
  public void newLetter(String letter) throws LetterQueueException {
    if (nextPos < queue.length) {
      queue[nextPos] = letter;
      nextPos++;
    } else
      throw new LetterQueueException("Letter queue is full.");
  }
  
  public String firstLetter() throws LetterQueueException {
    if (nextPos > 0)
      return queue[0];
    else
      throw new LetterQueueException("Letter queue is empty.");
  }

  public void removeLetter() throws LetterQueueException {
    if (nextPos > 0) {
      for (int i = 1; i < nextPos; i++)
        queue[i-1] = queue[i];
      queue[nextPos-1] = null;
      nextPos--;
    } else
      throw new LetterQueueException("Letter queue is empty.");
  }

  public int numLetters() {
    return nextPos;
  }

  public String letter(int pos) throws LetterQueueException {
    if (pos >= 0 && pos < nextPos)
      return queue[pos];
    else
      throw new LetterQueueException("Invalid letter position.");
  }

  public int[] shortLetters(int len) {
    int[] res = new int[numShortLetters(len)];
    int pos = 0;
    for (int i = 0; i < nextPos; i++)
      if (queue[i] != null && queue[i].length() < len) {
        res[pos] = i;
        pos++;
      }
    return res;
  }

  private int numShortLetters(int len) {
    int count = 0;
    for (int i = 0; i < nextPos; i++)
      if (queue[i] != null && queue[i].length() < len)
        count++;
    return count;
  }
  
}
