HPCToolkit
PointerStack.cpp
Go to the documentation of this file.
1
// -*-Mode: C++;-*-
2
3
// * BeginRiceCopyright *****************************************************
4
//
5
// $HeadURL$
6
// $Id$
7
//
8
// --------------------------------------------------------------------------
9
// Part of HPCToolkit (hpctoolkit.org)
10
//
11
// Information about sources of support for research and development of
12
// HPCToolkit is at 'hpctoolkit.org' and in 'README.Acknowledgments'.
13
// --------------------------------------------------------------------------
14
//
15
// Copyright ((c)) 2002-2019, Rice University
16
// All rights reserved.
17
//
18
// Redistribution and use in source and binary forms, with or without
19
// modification, are permitted provided that the following conditions are
20
// met:
21
//
22
// * Redistributions of source code must retain the above copyright
23
// notice, this list of conditions and the following disclaimer.
24
//
25
// * Redistributions in binary form must reproduce the above copyright
26
// notice, this list of conditions and the following disclaimer in the
27
// documentation and/or other materials provided with the distribution.
28
//
29
// * Neither the name of Rice University (RICE) nor the names of its
30
// contributors may be used to endorse or promote products derived from
31
// this software without specific prior written permission.
32
//
33
// This software is provided by RICE and contributors "as is" and any
34
// express or implied warranties, including, but not limited to, the
35
// implied warranties of merchantability and fitness for a particular
36
// purpose are disclaimed. In no event shall RICE or contributors be
37
// liable for any direct, indirect, incidental, special, exemplary, or
38
// consequential damages (including, but not limited to, procurement of
39
// substitute goods or services; loss of use, data, or profits; or
40
// business interruption) however caused and on any theory of liability,
41
// whether in contract, strict liability, or tort (including negligence
42
// or otherwise) arising in any way out of the use of this software, even
43
// if advised of the possibility of such damage.
44
//
45
// ******************************************************* EndRiceCopyright *
46
47
//***************************************************************************
48
//
49
// PointerStack.C:
50
//
51
// Author: John Mellor-Crummey October 1993
52
//
53
// rjf 2-21-98 Replaced previous versions of PointerStack with
54
// a self-contained implementaion for efficiency and
55
// to avoid using templates when building runtime libraries
56
// on machines on which the compiler itself does not run.
57
58
//***************************************************************************
59
60
//************************** System Include Files ***************************
61
62
//*************************** User Include Files ****************************
63
64
#include <
include/uint.h
>
65
66
#include "
PointerStack.hpp
"
67
68
//*************************** Forward Declarations **************************
69
70
//***************************************************************************
71
72
PointerStack::PointerStack
(
unsigned
int
initialSize)
73
{
74
theStack
=
new
void
*[initialSize];
75
topElement
= -1;
// initially empty
76
lastSlot
= initialSize -1;
77
}
78
79
80
PointerStack::~PointerStack
()
81
{
82
delete
[]
theStack
;
83
}
84
85
void
86
PointerStack::ExtendAndPush
(
void
*item) {
87
88
int
size =
lastSlot
+ 1;
89
int
newsize;
90
if
( size < 256 ) {
91
newsize = 256;
92
}
93
else
{
94
newsize = size * 2 ;
// Grow it fast to avoid reallocs.
95
}
96
97
// Create a new stack and copy the old one
98
void
** newStack =
new
void
*[newsize];
99
for
(
int
i = 0; i <=
topElement
; i++) { newStack[i] =
theStack
[i]; }
100
delete
[]
theStack
;
101
theStack
= newStack;
102
lastSlot
= newsize - 1;
// recalibrate 'lastSlot'
103
104
// Finally do the push.
105
theStack
[++
topElement
] = item;
106
}
107
108
109
110
111
112
113
114
115
116
117
PointerStack::theStack
void ** theStack
Definition:
PointerStack.hpp:73
PointerStack::topElement
int topElement
Definition:
PointerStack.hpp:71
PointerStack::PointerStack
PointerStack(unsigned int initialSize=32)
Definition:
PointerStack.cpp:72
PointerStack.hpp
PointerStack::ExtendAndPush
void ExtendAndPush(void *item)
Definition:
PointerStack.cpp:86
uint.h
PointerStack::lastSlot
int lastSlot
Definition:
PointerStack.hpp:72
PointerStack::~PointerStack
~PointerStack()
Definition:
PointerStack.cpp:80
src
lib
support
PointerStack.cpp
Generated by
1.8.13