libbbb  1.2.1
Groups common code used in some applications and libraries.
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros
dynstack.h
Go to the documentation of this file.
1 /* ========================================================================= */
2 /* ------------------------------------------------------------------------- *//*
12 
13 
14  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
15  Please read COPYING and README files in root folder
16  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
17 */
18 /* ------------------------------------------------------------------------- */
19 /* ========================================================================= */
20 #ifndef __DYNSTACK_INC__
21 #define __DYNSTACK_INC__
22 //
23 //
24 //
25 //
26 /* INCLUDES ------------------------------------------------------------ */
27 
28 #include <libbbb/libbbb.h>
29 #ifndef QT_NO_DEBUG
30 #include <QList>
31 #endif
32 
33 /* INCLUDES ============================================================ */
34 //
35 //
36 //
37 //
38 /* DEFINITIONS --------------------------------------------------------- */
39 
40 namespace bbb {
41 
42 /* DEFINITIONS ========================================================= */
43 //
44 //
45 //
46 //
47 /* CLASS --------------------------------------------------------------- */
48 
58 class DynStack {
59 
60  //
61  //
62  //
63  //
64  /* DEFINITIONS ----------------------------------------------------- */
65 
66 #ifndef ADD_PTR_INT
67 # define ADD_PTR_INT(p,i) ( ((char*)p) + i )
68 #endif
69 #ifndef DIF_PTR
70 # define DIF_PTR(p1,p2) (int)( ((char*)p2) - ((char*)p1) )
71 #endif
72  /* DEFINITIONS ===================================================== */
73  //
74  //
75  //
76  //
77  /* DATA ------------------------------------------------------------ */
78 
79 private:
80 
81 
85  void * p_buff_;
86 
90  int top_offset_;
91 
95  int alloc_;
96 
100  int freed_;
101 
102 #ifndef QT_NO_DEBUG
103 
106  QList<void*> lst_dyn_;
107 #endif
108 
109  /* DATA ============================================================ */
110  //
111  //
112  //
113  //
114  /* FUNCTIONS ------------------------------------------------------- */
115 
116 public:
117 
118 
122  DynStack ( int sz );
123 
124 
128  ~DynStack ( void );
129 
130 
134  bool isNull ( void )
135  { return ( p_buff_ == NULL ); }
136 
137 
143  bool isEmpty ( void )
144  { return ( top_offset_ == 0 ); }
145 
146 
152  void reset ( void );
153 
154 
158  void resetForced ( void );
159 
160 
166  bool reinit ( int sz );
167 
168 
172  bool isInStack ( void * ptr )
173  {
174  int i = DIF_PTR(p_buff_,ptr);
175  return ( i >= 0 && i < top_offset_ );
176  }
177 
178 
179 #ifndef QT_NO_DEBUG
180 
183  bool isDynamic ( void * ptr )
184  { return lst_dyn_.contains( ptr ); }
185 #endif
186 
187 
191  void * alloc ( int sz );
192 
193 
197  void release ( void * ptr );
198 
199 
200 
201 
202 protected:
203 
207  void * topPointer ( void )
208  { Q_ASSERT( p_buff_ != NULL ); return ADD_PTR_INT(p_buff_,top_offset_); }
209 
210 
211 
212 
213 
214  /* FUNCTIONS ======================================================= */
215  //
216  //
217  //
218  //
219 
220 }; /* class DynStack */
221 
222 /* CLASS =============================================================== */
223 //
224 //
225 //
226 //
227 
228 } // namespace bbb
229 
230 #endif // __DYNSTACK_INC__
231 /* ------------------------------------------------------------------------- */
232 /* ========================================================================= */