]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/client/providers/Iterators.java
80bcc1bf731948eaee847238829ae5b28d1f1695
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / client / providers / Iterators.java
1 package com.irtimaled.bbor.client.providers;
2
3 import com.irtimaled.bbor.common.models.AbstractBoundingBox;
4
5 import java.util.Iterator;
6 import java.util.function.Supplier;
7
8 class Iterators {
9     private static class Empty<T> implements Iterable<T> {
10         @Override
11         public Iterator<T> iterator() {
12             return new Iterator<T>() {
13                 @Override
14                 public boolean hasNext() {
15                     return false;
16                 }
17
18                 @Override
19                 public T next() {
20                     return null;
21                 }
22             };
23         }
24     }
25
26     static <T extends AbstractBoundingBox> Iterable<T> empty() {
27         return new Empty<>();
28     }
29
30     private static class SingletonIterable<T> implements Iterable<T> {
31         private final Supplier<T> supplier;
32
33         private SingletonIterable(Supplier<T> supplier) {
34             this.supplier = supplier;
35         }
36
37         @Override
38         public Iterator<T> iterator() {
39             return new Iterator<T>() {
40                 private boolean hasNext = true;
41                 @Override
42                 public boolean hasNext() {
43                     return hasNext;
44                 }
45
46                 @Override
47                 public T next() {
48                     if(!hasNext) return null;
49
50                     hasNext = false;
51                     return supplier.get();
52                 }
53             };
54         }
55     }
56
57     public static <T extends AbstractBoundingBox> Iterable<T> singleton(final Supplier<T> supplier) {
58         return new SingletonIterable<>(supplier);
59     }
60 }