Loading...
Searching...
No Matches
LIFOStack.tpp
1/*---------------------------------------------------------------------------*\
2 *
3 * bitpit
4 *
5 * Copyright (C) 2015-2021 OPTIMAD engineering Srl
6 *
7 * -------------------------------------------------------------------------
8 * License
9 * This file is part of bitpit.
10 *
11 * bitpit is free software: you can redistribute it and/or modify it
12 * under the terms of the GNU Lesser General Public License v3 (LGPL)
13 * as published by the Free Software Foundation.
14 *
15 * bitpit is distributed in the hope that it will be useful, but WITHOUT
16 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
17 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
18 * License for more details.
19 *
20 * You should have received a copy of the GNU Lesser General Public License
21 * along with bitpit. If not, see <http://www.gnu.org/licenses/>.
22 *
23\*---------------------------------------------------------------------------*/
24
25// ========================================================================== //
26// - SORTING ALGORITHMS - //
27// //
28// Functions for data sorting. //
29// ========================================================================== //
30// INFO //
31// Author : Alessandro Alaia //
32// Version : v2.0 //
33// //
34// All rights reserved. //
35// ========================================================================== //
36
37namespace bitpit{
38
39// ========================================================================== //
40// TEMPLATE IMPLEMENTATIONS //
41// ========================================================================== //
42
55// Constructors ============================================================= //
56
57// -------------------------------------------------------------------------- //
61template <class T>
63 void
64) {
65
66// ========================================================================== //
67// VARIABLES DECLARATION //
68// ========================================================================== //
69
70// Local variables
71// none
72
73// Counters
74// none
75
76// ========================================================================== //
77// CREATE LIFO STACK //
78// ========================================================================== //
79
80// Max stack dimensions
81MAXSTK = 10;
82
83// Initialize stack
84increaseSTACK();
85
86// Currenst stack size
87TOPSTK = 0;
88
89return; };
90
91// -------------------------------------------------------------------------- //
100template <class T>
102 int maxstack
103) {
104
105// ========================================================================== //
106// VARIABLES DECLARATION //
107// ========================================================================== //
108
109// Local variables
110// none
111
112// Counters
113// none
114
115// ========================================================================== //
116// CREATE LIFO STACK //
117// ========================================================================== //
118
119// Max stack dimensions
120MAXSTK = maxstack;
121
122// Initialize stack
123increaseSTACK();
124
125// Currenst stack size
126TOPSTK = 0;
127
128return; };
129
130// -------------------------------------------------------------------------- //
139template <class T>
141 std::vector<T> &items
142) {
143
144// ========================================================================== //
145// VARIABLES DECLARATION //
146// ========================================================================== //
147
148// Local variables
149// none
150
151// Counters
152// none
153
154// ========================================================================== //
155// CREATE LIFO STACK //
156// ========================================================================== //
157
158// Max stack dimensions
159MAXSTK = items.size();
160
161// Initialize stack
162increaseSTACK();
163
164// Currenst stack size
165TOPSTK = 0;
166
167// Put items into the stack
168push(items);
169
170return; };
171
172// Destructors ============================================================== //
173
174// -------------------------------------------------------------------------- //
180template <class T>
182 void
183) {
184
185// ========================================================================== //
186// VARIABLES DECLARATION //
187// ========================================================================== //
188
189// Local variables
190// none
191
192// Counters
193// none
194
195// ========================================================================== //
196// DESTROY LIFO STACK //
197// ========================================================================== //
198
199// Maximal stack size
200MAXSTK = 0;
201
202// Current stack dimensions
203TOPSTK = 0;
204
205// Destroy items
206STACK.clear();
207
208return; };
209
210// Methods ================================================================== //
211
212// -------------------------------------------------------------------------- //
216template <class T>
218 void
219) {
220
221// ========================================================================== //
222// VARIABLES DECLARATION //
223// ========================================================================== //
224
225// Local variables
226// none
227
228// Counters
229// none
230
231// ========================================================================== //
232// CLEAR CONTENT //
233// ========================================================================== //
234TOPSTK = 0;
235STACK.resize(MAXSTK);
236
237return; }
238
239// -------------------------------------------------------------------------- //
244template <class T>
246 void
247) {
248
249// ========================================================================== //
250// VARIABLES DECLARATION //
251// ========================================================================== //
252
253// Local variables
254// none
255
256// Counters
257// none
258
259// ========================================================================== //
260// INCREASE STACK SIZE //
261// ========================================================================== //
262STACK.resize(STACK.size() + MAXSTK);
263
264return; };
265
266// -------------------------------------------------------------------------- //
271template <class T>
273 void
274) {
275
276// ========================================================================== //
277// VARIABLES DECLARATION //
278// ========================================================================== //
279
280// Local variables
281// none
282
283// Counters
284// none
285
286// ========================================================================== //
287// DECREASE STACK SIZE //
288// ========================================================================== //
289STACK.resize(std::max((int) (STACK.size() - MAXSTK), MAXSTK));
290
291return; };
292
293// -------------------------------------------------------------------------- //
300template <class T>
302 void
303) {
304
305// ========================================================================== //
306// VARIABLES DECLARATION //
307// ========================================================================== //
308
309// Local variables
310T item;
311
312// Counters
313// none
314
315// ========================================================================== //
316// POP LAST ELEMENT FROM THE LIFO STACK //
317// ========================================================================== //
318
319// Extract last element from the stack list --------------------------------- //
320item = STACK[TOPSTK - 1];
321TOPSTK--;
322
323// Resize stack list -------------------------------------------------------- //
324if (TOPSTK <= (long) STACK.size() - MAXSTK) {
325 decreaseSTACK();
326}
327
328return(item); };
329
330// -------------------------------------------------------------------------- //
337template <class T>
339 const T &item
340) {
341
342// ========================================================================== //
343// VARIABLES DECLARATION //
344// ========================================================================== //
345
346// Local variables
347// none
348
349// Counters
350// none
351
352// ========================================================================== //
353// POP LAST ELEMENT FROM THE LIFO STACK //
354// ========================================================================== //
355
356// Resize stack list -------------------------------------------------------- //
357if (TOPSTK >= (long) STACK.size()) {
358 increaseSTACK();
359}
360
361// Extract last element from the stack list --------------------------------- //
362STACK[TOPSTK] = item;
363TOPSTK++;
364
365return; };
366
367// -------------------------------------------------------------------------- //
376template <class T>
378 const std::vector<T> &items
379) {
380
381// ========================================================================== //
382// VARIABLES DECLARATION //
383// ========================================================================== //
384
385// Local variables
386int n_items;
387
388// Counters
389int i;
390
391// ========================================================================== //
392// PUSH ITEMS INTO THE STACK //
393// ========================================================================== //
394n_items = items.size();
395for (i = 0; i < n_items; i++) {
396 push(items[i]);
397} //next i
398
399return; };
400
401// -------------------------------------------------------------------------- //
408template <class T>
410 std::ostream &out
411) {
412
413// ========================================================================== //
414// VARIABLES DECLARATION //
415// ========================================================================== //
416
417// Local variables
418// none
419
420// Counters
421// none
422
423// ========================================================================== //
424// DISPLAY LIFO INFO //
425// ========================================================================== //
426out << "LIFO stack:" << std::endl;
427out << " n. of elements: " << TOPSTK << std::endl;
428out << " stack buffer: " << MAXSTK << std::endl;
429out << " data struct. size: " << STACK.size() << std::endl;
430out << " data: " << std::endl;
431out << "[";
432if (TOPSTK == 0) return;
433for (int i = 0; i < TOPSTK-1; i++) {
434 out << STACK[i] << ", ";
435} //next i
436out << STACK[TOPSTK-1] << "]" << std::endl;
437
438return; };
439
440}
void increaseSTACK(void)
void push(const T &)
void display(std::ostream &)
void decreaseSTACK(void)
--- layout: doxygen_footer ---