1 /*
2  * Copyright (c) 2002-2008 LWJGL Project
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  *   notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  *   notice, this list of conditions and the following disclaimer in the
14  *   documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of 'LWJGL' nor the names of
17  *   its contributors may be used to endorse or promote products derived
18  *   from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 package org.lwjgl.opengl;
33 
34 class StateStack {
35 	private int[] state_stack;
36 	private int stack_pos;
37 
getState()38 	public int getState() {
39 		return state_stack[stack_pos];
40 	}
41 
pushState(int new_state)42 	public void pushState(int new_state) {
43 		int pos = ++stack_pos;
44 		if (pos == state_stack.length) {
45 			growState();
46 		}
47 		state_stack[pos] = new_state;
48 	}
49 
popState()50 	public int popState() {
51 		return state_stack[stack_pos--];
52 	}
53 
growState()54 	public void growState() {
55 		int[] new_state_stack = new int[state_stack.length + 1];
56 		System.arraycopy(state_stack, 0, new_state_stack, 0, state_stack.length);
57 		state_stack = new_state_stack;
58 	}
59 
StateStack(int initial_value)60 	StateStack(int initial_value) {
61 		state_stack = new int[1];
62 		stack_pos = 0;
63 		state_stack[stack_pos] = initial_value;
64 	}
65 }
66