s4g  0.9.2
высокоуровневый, императивный, процедурный, встраиваемый, скриптовый язык программирования общего назначения, написанный на C++.
s4g_stack.h
См. документацию.
1 
2 /*
3 Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
4 license MIT see in LICENSE or
5 https://s4g.su/
6 */
7 
13 #ifndef __S4G_STACK_H
14 #define __S4G_STACK_H
15 
16 #include <common/array.h>
17 
21 template <typename T, int BlockSize = 16>
22 class s4g_Stack
23 {
24 public:
25  s4g_Stack(){ m_iCount = 0; m_Arr.resize(BlockSize); }
26 
28  int getSize()
29  {
30  return m_iCount;
31  }
32 
36  void setStartSize(int iCount)
37  {
38  if (iCount > m_Arr.size())
39  m_Arr.resize(iCount);
40  else
41  m_iCount = iCount;
42  }
43 
45  void clear()
46  {
47  m_Arr.clear();
48  m_iCount = 0;
49  }
50 
52  void reserve(int iCount)
53  {
54  m_Arr.reserve(iCount);
55  }
56 
58  void push(T val)
59  {
60  m_Arr[m_iCount] = val;
61  ++m_iCount;
62  }
63 
65  void pushReplaceTop(T val)
66  {
67  if (m_iCount > 0)
68  {
69  m_Arr[m_iCount - 1] = val;
70  }
71  else
72  push(val);
73  }
74 
76  void push_back(T val)
77  {
78  push(val);
79  }
80 
82  void pop(int iCount=1)
83  {
84  if (iCount > m_iCount)
85  m_iCount = 0;
86  else
87  m_iCount -= iCount;
88  }
89 
92  T& get(int id)
93  {
94  if (id >= 0 && id < m_iCount)
95  {
96  return m_Arr[id];
97  }
98  else if (id < 0)
99  {
100  if ((m_iCount + id) >= 0 && (m_iCount + id) < m_iCount)
101  return m_Arr[m_iCount + id];
102  else if (m_iCount == 0 && id == -1)
103  return m_Arr[0];
104  else
105  {
106  DBG_BREAK;
107  }
108  }
109  else if (id >= m_iCount)
110  {
111  m_iCount = id+1;
112  return m_Arr[id];
113  }
114  }
115 
117  T& operator[](int id)
118  {
119  return get(id);
120  }
121 
123  T& getTop()
124  {
125  return get(-1);
126  }
127 
128 protected:
129  int m_iCount;
130  Array<T, BlockSize> m_Arr;
131 };
132 
133 #endif
int getSize()
возвращает текущий размер стека
Definition: s4g_stack.h:28
void pop(int iCount=1)
вытолкнуть iCount количество элементов
Definition: s4g_stack.h:82
Стек, а точнее простой динамический массив с элементами стека
Definition: s4g_stack.h:22
void clear()
очистка стека
Definition: s4g_stack.h:45
T & operator[](int id)
аналогично get.
Definition: s4g_stack.h:117
void pushReplaceTop(T val)
впихнуть на вершину стека значение с заменой того что было на вершине
Definition: s4g_stack.h:65
void reserve(int iCount)
резервация памяти под элементы стека, текущий размер не изменится
Definition: s4g_stack.h:52
void push_back(T val)
аналогично push.
Definition: s4g_stack.h:76
T & getTop()
возвращает вершину стека
Definition: s4g_stack.h:123
void setStartSize(int iCount)
установка условно стартовой позиции стека, если стартовая позици больше чем элементов в массиве то ма...
Definition: s4g_stack.h:36
void push(T val)
впихнуть на вершину значение (все кто был станут на 1 элемент ниже)
Definition: s4g_stack.h:58