2 SuperCollider real time audio synthesis system
3 Copyright (c) 2002 James McCartney. All rights reserved.
4 http://www.audiosynth.com
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25 #include "SimpleStack.h"
26 #include "InitAlloc.h"
28 void initLongStack(LongStack
*self
)
30 //dbg("initLongStack");
36 void freeLongStack(LongStack
*self
)
38 //dbg("freeLongStack");
42 pyr_pool_compile
->Free((void*)self
->stak
);
47 void growLongStack(LongStack
*self
)
51 self
->maxsize
+= self
->maxsize
>> 1; // grow by 50%
54 // lifetime: kill after compile.
55 self
->stak
= (long*)pyr_pool_compile
->Alloc(self
->maxsize
* sizeof(long));
57 //BlockMoveData(oldstak, self->stak, self->num * sizeof(long));
58 memcpy(self
->stak
, oldstak
, self
->num
* sizeof(long));
59 pyr_pool_compile
->Free((void*)oldstak
);
62 self
->stak
= (long*)pyr_pool_compile
->Alloc(self
->maxsize
* sizeof(long));
69 pushls(LongStack
*self
, long value
) {
70 //dbg2("pushls %lX", value);
71 if (self
->num
+1 > self
->maxsize
) {
74 self
->stak
[self
->num
++] = value
;
78 popls(LongStack
*self
) {
79 if (self
->num
> 0) return self
->stak
[--self
->num
];
81 error("stack empty! (pop)\n");
86 int emptyls(LongStack
*self
)
88 return self
->num
<= 0;