package solution_g11; import java.util.function.Consumer; import testat_g11.IPDetermination; import testat_g11.IPriorityQueue; import testat_g11.Ticket; import testat_g11.TicketStatus; public class SimplePriorityQueue00000 implements IPriorityQueue { private IPDetermination prioDet; private int size; private T[] tickets; public SimplePriorityQueue00000(IPDetermination prioDet) { super(); this.prioDet = prioDet; tickets = (T[]) java.lang.reflect.Array.newInstance(Ticket.class, 10); size = 0; } @Override public boolean add(T t) { if (t == null) { return false; } if (t.getPriority() < 0) { return false; } int priority = setPriority(t, t.getPriority()); if (priority >= 0) { return true; // fehler } else { tickets[size] = t; size++; } return true; } @Override public T poll() { if (size == 0) { return null; } T ticket = tickets[0]; for (int i = 1; i < size; i++) { if (prioDet.calculate(tickets[i]) > prioDet.calculate(ticket)) { ticket.incrementAge(); ticket = tickets[i]; } else { tickets[i].incrementAge(); } } remove(ticket); return ticket; } @Override public boolean contains(T t) { int index = getIndexOfTicket(t); return index >= 0; } private int getIndexOfTicket(T t) { for (int i = 0; i < size; i++) { if (tickets[i].equals(t)) { return i; } } return -1; } @Override public int getTotalPriority(T t) { int index = getIndexOfTicket(t); if (index >= 0) { return prioDet.calculate(tickets[index]); } return -1; } @Override public int setPriority(T t, int newPriority) { int index = getIndexOfTicket(t); if (index >= 0) { tickets[index].setPriority(newPriority); return prioDet.calculate(tickets[index]); } return -1; } @Override public int size() { return size; } @Override public void forAll(Consumer action) { for (int i = 0; i < size; i++) { action.accept(tickets[i]); } } @Override public boolean remove(T t) { int index = getIndexOfTicket(t); if (index < 0) { return false; } t.setStatus(TicketStatus.FINISHED); for (int i = index; i < size - 1; i++) { tickets[i] = tickets[i + 1]; } tickets[size - 1] = null; size = size - 1; return true; } }