diff options
| author | Jérémy Zurcher <jeremy@asynk.ch> | 2018-07-06 13:47:14 +0200 | 
|---|---|---|
| committer | Jérémy Zurcher <jeremy@asynk.ch> | 2018-07-06 13:47:14 +0200 | 
| commit | 80cde5a9822b7beb509df1904b11c30be4f22cac (patch) | |
| tree | 7a83786da8359cfaba71df29f3f9cdeee9965af9 /core | |
| parent | 21405a878478592281e077981c2d155b2c5af36f (diff) | |
| download | gdx-boardgame-80cde5a9822b7beb509df1904b11c30be4f22cac.zip gdx-boardgame-80cde5a9822b7beb509df1904b11c30be4f22cac.tar.gz  | |
add engine/util : Collection interface and implementations
Diffstat (limited to 'core')
5 files changed, 232 insertions, 0 deletions
diff --git a/core/src/ch/asynk/zproject/engine/util/Collection.java b/core/src/ch/asynk/zproject/engine/util/Collection.java new file mode 100644 index 0000000..001ea76 --- /dev/null +++ b/core/src/ch/asynk/zproject/engine/util/Collection.java @@ -0,0 +1,28 @@ +package ch.asynk.zproject.engine.util; + +import java.util.Iterator; + +public interface Collection<E> extends Iterator, Iterable<E> +{ +    public int size(); + +    public boolean isEmpty(); + +    public void clear(); + +    public void ensureCapacity(int c); + +    public boolean contains(E e); + +    public E get(int idx); + +    public int indexOf(E e); + +    public boolean add(E e); + +    public boolean insert(E e, int idx); + +    public E remove(int idx); + +    public boolean remove(E e); +} diff --git a/core/src/ch/asynk/zproject/engine/util/IterableArray.java b/core/src/ch/asynk/zproject/engine/util/IterableArray.java new file mode 100644 index 0000000..b6b0eee --- /dev/null +++ b/core/src/ch/asynk/zproject/engine/util/IterableArray.java @@ -0,0 +1,143 @@ +package ch.asynk.zproject.engine.util; + +import java.util.Arrays; +import java.util.Iterator; + +public class IterableArray<E> implements Collection<E> +{ +    private int idx; +    private int s; +    private int c; +    transient E[] data; + +    @SuppressWarnings("unchecked") +    public IterableArray(int capacity) +    { +        this.s = 0; +        this.c = capacity; +        this.data = (E[]) new Object[c]; +    } + +    @Override public int size() +    { +        return s; +    } + +    @Override public boolean isEmpty() +    { +        return (s == 0); +    } + +    @Override public void clear() +    { +        for (int i = 0; i < s; i++) +            data[i] = null; +        s = 0; +    } + +    @Override public void ensureCapacity(int min) +    { +        if (c > min) return; +        c += (c >> 1); +        if (c < min) +            c = min; +        data = Arrays.copyOf(data, c); +    } + +    @Override public boolean contains(E e) +    { +        if (e == null) { +            for (int i = 0; i < s; i++) { +                if (data[i] == null) +                    return true; +            } +        } else { +            for (int i = 0; i < s; i++) { +                if (e.equals(data[i])) +                    return true; +            } +        } +        return false; +    } + +    @Override public E get(int i) +    { +        return data[i]; +    } + +    @Override public int indexOf(E e) +    { +        for (int i = 0; i < data.length; i++) { +            if (data[i] != null && data[i].equals(e)) +                return i; +        } +        return -1; +    } + +    @Override public boolean add(E e) +    { +        ensureCapacity(s + 1); +        data[s] = e; +        s += 1; +        return true; +    } + +    @Override public boolean insert(E e, int idx) +    { +        ensureCapacity(s + 1); +        System.arraycopy(data, idx, data, idx+1, (s - idx)); +        data[idx] = e; +        s += 1; +        return true; +    } + +    @Override public E remove(int i) +    { +        E e = data[i]; +        int m = (s - i - 1); +        if (m > 0) +            System.arraycopy(data, i+1, data, i, m); +        data[--s] = null; + +        return e; +    } + +    @Override public boolean remove(E e) +    { +        for (int i = 0; i < s; i++) { +            if (e.equals(data[i])) { +                int m = (s - i - 1); +                if (m > 0) +                    System.arraycopy(data, i+1, data, i, m); +                data[--s] = null; +                return true; +            } +        } +        return false; +    } + +    @SuppressWarnings("unchecked") +    @Override public Iterator<E> iterator() +    { +        this.idx = 0; +        return (Iterator<E>) this; +    } + +    @Override public boolean hasNext() +    { +        return (idx < s); +    } + +    @Override public E next() +    { +        E e = get(idx); +        idx += 1; +        return e; +    } + +    @Override public void remove() +    { +        idx -= 1; +        remove(idx); +    } +} diff --git a/core/src/ch/asynk/zproject/engine/util/IterableQueue.java b/core/src/ch/asynk/zproject/engine/util/IterableQueue.java new file mode 100644 index 0000000..bbf05bf --- /dev/null +++ b/core/src/ch/asynk/zproject/engine/util/IterableQueue.java @@ -0,0 +1,19 @@ +package ch.asynk.zproject.engine.util; + +public class IterableQueue<E> extends IterableArray<E> +{ +    public IterableQueue(int n) +    { +        super(n); +    } + +    public void enqueue(E e) +    { +        add(e); +    } + +    public E dequeue() +    { +        return remove(0); +    } +} diff --git a/core/src/ch/asynk/zproject/engine/util/IterableSet.java b/core/src/ch/asynk/zproject/engine/util/IterableSet.java new file mode 100644 index 0000000..37ae573 --- /dev/null +++ b/core/src/ch/asynk/zproject/engine/util/IterableSet.java @@ -0,0 +1,16 @@ +package ch.asynk.zproject.engine.util; + +public class IterableSet<E> extends IterableArray<E> +{ +    public IterableSet(int n) +    { +        super(n); +    } + +    @Override public boolean add(E e) +    { +        if (contains(e)) return false; +        super.add(e); +        return true; +    } +} diff --git a/core/src/ch/asynk/zproject/engine/util/IterableStack.java b/core/src/ch/asynk/zproject/engine/util/IterableStack.java new file mode 100644 index 0000000..7e7edb0 --- /dev/null +++ b/core/src/ch/asynk/zproject/engine/util/IterableStack.java @@ -0,0 +1,26 @@ +package ch.asynk.zproject.engine.util; + +public class IterableStack<E> extends IterableArray<E> +{ +    public IterableStack(int n) +    { +        super(n); +    } + +    public void push(E e) +    { +        add(e); +    } + +    public E pop() +    { +        if (size() <= 0) return null; +        return remove(size() - 1); +    } + +    public E getTop() +    { +        if (size() <= 0) return null; +        return get(size() - 1); +    } +}  | 
