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
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;
|
|
}
|
|
|
|
}
|
|
|