Testat Sammlung
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123 lines
2.4 KiB

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<T extends Ticket> implements IPriorityQueue<T> {
private IPDetermination<Ticket> prioDet;
private int size;
private T[] tickets;
public SimplePriorityQueue00000(IPDetermination<Ticket> 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<T> 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;
}
}