1 /* 2 * Abuse - dark 2D side-scrolling platform game 3 * Copyright (c) 1995 Crack dot Com 4 * Copyright (c) 2005-2011 Sam Hocevar <sam@hocevar.net> 5 * 6 * This software was released into the Public Domain. As with most public 7 * domain software, no warranty is made or implied by Crack dot Com, by 8 * Jonathan Clark, or by Sam Hocevar. 9 */ 10 11 #ifndef __STACK_HPP_ 12 #define __STACK_HPP_ 13 14 #include <stdio.h> 15 #include <stdlib.h> 16 17 // A fixed-size stack class 18 template<class T> class GrowStack 19 { 20 public: GrowStack(int max_size)21 GrowStack(int max_size) 22 { 23 m_max_size = max_size; 24 m_size = 0; 25 sdata = (T **)malloc(sizeof(T *) * m_max_size); 26 } 27 ~GrowStack()28 ~GrowStack() 29 { 30 if (m_size != 0) 31 fprintf(stderr, "warning: cleaning up nonempty stack\n"); 32 free(sdata); 33 } 34 push(T * data)35 void push(T *data) 36 { 37 if (m_size >= m_max_size) 38 { 39 lbreak("error: stack overflow (%d >= %d)\n", 40 (int)m_size, (int)m_max_size); 41 exit(1); 42 } 43 sdata[m_size] = data; 44 m_size++; 45 } 46 pop(size_t total)47 T *pop(size_t total) 48 { 49 if (total > m_size) 50 { 51 lbreak("error: stack underflow\n"); 52 exit(1); 53 } 54 m_size -= total; 55 return sdata[m_size]; 56 } 57 58 public: 59 T **sdata; 60 size_t m_size; 61 62 private: 63 size_t m_max_size; 64 }; 65 66 #endif 67 68