Skip to content

Commit

Permalink
refactor: ItemTicket#targetStatus as regular int
Browse files Browse the repository at this point in the history
  • Loading branch information
ishland committed Jul 23, 2024
1 parent e148bfc commit ea725ae
Showing 1 changed file with 8 additions and 14 deletions.
22 changes: 8 additions & 14 deletions src/main/java/com/ishland/flowsched/scheduler/TicketSet.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,16 @@
import it.unimi.dsi.fastutil.objects.ObjectSet;

import java.lang.invoke.VarHandle;
import java.util.concurrent.atomic.AtomicInteger;

public class TicketSet<K, V, Ctx> {

private final ItemStatus<K, V, Ctx> initialStatus;
private final ObjectOpenHashSet<ItemTicket<K, V, Ctx>>[] status2Tickets;
private final AtomicInteger targetStatus = new AtomicInteger();
private int targetStatus = 0;

public TicketSet(ItemStatus<K, V, Ctx> initialStatus) {
this.initialStatus = initialStatus;
this.targetStatus.set(initialStatus.ordinal());
this.targetStatus = initialStatus.ordinal();
ItemStatus<K, V, Ctx>[] allStatuses = initialStatus.getAllStatuses();
this.status2Tickets = new ObjectOpenHashSet[allStatuses.length];
for (int i = 0; i < allStatuses.length; i++) {
Expand All @@ -36,8 +35,8 @@ public boolean add(ItemTicket<K, V, Ctx> ticket) {
final boolean added = this.status2Tickets[targetStatus.ordinal()].add(ticket);
if (!added) return false;

if (this.targetStatus.get() < targetStatus.ordinal()) {
this.targetStatus.set(targetStatus.ordinal());
if (this.targetStatus < targetStatus.ordinal()) {
this.targetStatus = targetStatus.ordinal();
}
return true;
}
Expand All @@ -47,22 +46,17 @@ public boolean remove(ItemTicket<K, V, Ctx> ticket) {
final boolean removed = this.status2Tickets[targetStatus.ordinal()].remove(ticket);
if (!removed) return false;

while (this.status2Tickets[this.targetStatus.get()].isEmpty()) {
if (this.targetStatus.decrementAndGet() <= 0) {
while (this.status2Tickets[this.targetStatus].isEmpty()) {
if ((-- this.targetStatus) <= 0) {
break;
}
}
ObjectOpenHashSet<ItemTicket<K, V, Ctx>>[] tickets = this.status2Tickets;
for (int i = this.targetStatus.get() + 1, ticketsLength = tickets.length; i < ticketsLength; i++) {
ObjectOpenHashSet<ItemTicket<K, V, Ctx>> status2Ticket = tickets[i];
Assertions.assertTrue(status2Ticket.isEmpty());
}

return true;
}

public ItemStatus<K, V, Ctx> getTargetStatus() {
return this.initialStatus.getAllStatuses()[this.targetStatus.get()];
return this.initialStatus.getAllStatuses()[this.targetStatus];
}

public ObjectSet<ItemTicket<K, V, Ctx>> getTicketsForStatus(ItemStatus<K, V, Ctx> status) {
Expand All @@ -73,7 +67,7 @@ void clear() {
for (ObjectOpenHashSet<ItemTicket<K, V, Ctx>> tickets : status2Tickets) {
tickets.clear();
}
this.targetStatus.set(initialStatus.ordinal());
this.targetStatus = initialStatus.ordinal();
VarHandle.fullFence();
}

Expand Down

0 comments on commit ea725ae

Please sign in to comment.