Skip to content

Commit 18597ed

Browse files
author
Bytekeeper
committed
Adapted after integrating in actual "test" bot.
1 parent fd866f9 commit 18597ed

File tree

6 files changed

+74
-13
lines changed

6 files changed

+74
-13
lines changed

src/main/java/org/bk/ass/manage/SetReservation.java renamed to src/main/java/org/bk/ass/manage/BlacklistReservation.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,25 @@
88
*
99
* @param <T>
1010
*/
11-
public class SetReservation<T> implements Reservation<T> {
11+
public class BlacklistReservation<T> implements Reservation<T> {
1212

1313
private final Set<T> reservedItems = new HashSet<>();
1414

15-
public void setReservedItems(Set<T> reservedItems) {
15+
public void reset() {
1616
this.reservedItems.clear();
17-
this.reservedItems.addAll(reservedItems);
1817
}
1918

2019
@Override
21-
public boolean reserve(Lock<T> lock, T item) {
20+
public boolean reserve(Object source, T item) {
2221
return reservedItems.add(item);
2322
}
2423

2524
@Override
26-
public void release(Lock<T> lock, T item) {
25+
public void release(Object source, T item) {
2726
reservedItems.remove(item);
2827
}
28+
29+
public boolean isAvailable(T item) {
30+
return !reservedItems.contains(item);
31+
}
2932
}

src/main/java/org/bk/ass/manage/GMSReservation.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,20 @@ public GMS getGms() {
3030
}
3131

3232
@Override
33-
public boolean reserve(Lock<GMS> lock, GMS gmsToReserve) {
33+
public boolean reserve(Object source, GMS gmsToReserve) {
3434
boolean success = gms.canAfford(gmsToReserve);
3535
gms = gms.subtract(gmsToReserve);
3636
return success;
3737
}
3838

3939
@Override
40-
public boolean itemAvailableInFuture(Lock<GMS> lock, GMS futureItem, int futureFrames) {
40+
public boolean itemAvailableInFuture(Object source, GMS futureItem, int futureFrames) {
4141
GMS futureGMS = gmsPrediction.apply(futureFrames).add(gms);
4242
return futureGMS.canAfford(futureItem);
4343
}
4444

4545
@Override
46-
public void release(Lock<GMS> lock, GMS gmsToRelease) {
46+
public void release(Object source, GMS gmsToRelease) {
4747
gms = gms.add(gmsToRelease);
4848
}
4949
}

src/main/java/org/bk/ass/manage/ListLock.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ public ListLock(Reservation<List<T>> reservation, Supplier<List<T>> selector) {
1515
}
1616

1717
public boolean releaseItem(T item) {
18-
return releaseItem(Collections.singletonList(item));
18+
return releasePartially(Collections.singletonList(item));
1919
}
2020

2121
/**
2222
* Releases only some of the items in the list.
2323
*/
24-
public boolean releaseItem(List<T> partial) {
24+
public boolean releasePartially(List<T> partial) {
2525
int items = item.size();
2626
item.removeAll(partial);
2727
if (item.size() + partial.size() != items)
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package org.bk.ass.manage;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
/**
7+
* Wrapper for {@link Reservation} to allow for "atomic" list of item reservations.
8+
*/
9+
public class ListReservation<T> implements Reservation<List<T>> {
10+
11+
private final Reservation<T> delegate;
12+
13+
public ListReservation(Reservation<T> delegate) {
14+
this.delegate = delegate;
15+
}
16+
17+
@Override
18+
public boolean reserve(Object source, List<T> itemList) {
19+
ArrayList<T> reservedItems = new ArrayList<>();
20+
for (T item : itemList) {
21+
boolean reserved = delegate.reserve(source, item);
22+
if (!reserved) {
23+
reservedItems.forEach(it -> delegate.release(source, it));
24+
return false;
25+
}
26+
reservedItems.add(item);
27+
}
28+
return true;
29+
}
30+
31+
@Override
32+
public void release(Object source, List<T> itemList) {
33+
itemList.forEach(it -> delegate.release(source, it));
34+
}
35+
}
36+

src/main/java/org/bk/ass/manage/Reservation.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,19 @@ public interface Reservation<T> {
1212
* reserved but is not yet available. (Ie. resources might be "blocked" for later use, but not yet
1313
* spendable.)
1414
*/
15-
boolean reserve(Lock<T> lock, T item);
15+
boolean reserve(Object source, T item);
1616

1717
/**
1818
* Returns true if the given item will be available in futureFrames frames. The given item will
1919
* already be reserved when this is called! If used for {@link GMS}, you should re-add the given
2020
* {@link GMS} before checking for sufficient resources.
2121
*/
22-
default boolean itemAvailableInFuture(Lock<T> lock, T item, int futureFrames) {
22+
default boolean itemAvailableInFuture(Object source, T item, int futureFrames) {
2323
return false;
2424
}
2525

2626
/**
2727
* Releases the given item.
2828
*/
29-
void release(Lock<T> lock, T item);
29+
void release(Object source, T item);
3030
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.bk.ass.manage;
2+
3+
import java.util.Collection;
4+
5+
public class WhiteListReservation<T, S extends Collection<T>> implements Reservation<T> {
6+
7+
public S availableItems;
8+
9+
public boolean isAvailable(T item) {
10+
return availableItems.contains(item);
11+
}
12+
13+
@Override
14+
public boolean reserve(Object source, T item) {
15+
return availableItems.remove(item);
16+
}
17+
18+
@Override
19+
public void release(Object source, T item) {
20+
availableItems.add(item);
21+
}
22+
}

0 commit comments

Comments
 (0)