GPL + CeCILL Header change
[scilab.git] / scilab / modules / xcos / src / java / org / scilab / modules / xcos / utils / Stack.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2015-2015 - Scilab Enterprises - Clement DAVID
4  *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  * === LICENSE_END ===
14  *
15  */
16
17 package org.scilab.modules.xcos.utils;
18
19 import java.util.ArrayList;
20 import java.util.Vector;
21 import java.util.stream.IntStream;
22 import java.util.stream.Stream;
23
24 /**
25  * Local implementation of a Stack as the java default one inherit from
26  * {@link Vector}.
27  *
28  * @param <E>
29  *            the contained item klass
30  */
31 public class Stack<E> {
32     private ArrayList<E> stack = new ArrayList<>();
33
34     public void pop() {
35         stack.remove(stack.size() - 1);
36     }
37
38     public void push(E e) {
39         stack.add(e);
40     }
41
42     public E peek() {
43         return peek(0);
44     }
45
46     public E peek(int depth) {
47         return stack.get(stack.size() - 1 - depth);
48     }
49
50     public int size() {
51         return stack.size();
52     }
53
54     /**
55      * Stream in a reversed order (traditional stack usage)
56      * @return a stream object
57      */
58     public Stream<E> stream() {
59         return IntStream.range(0, stack.size()).mapToObj(i -> stack.get(stack.size() - 1 - i));
60     }
61
62     @Override
63     public String toString() {
64         return stack.toString();
65     }
66 }