36 #ifndef STACKFRAMEVECTOR_H
37 #define STACKFRAMEVECTOR_H
54 typedef typename BufferType::iterator
iterator;
60 typedef typename BufferType::pointer
pointer;
110 operator std::vector<T>();
114 void push(
const T &);
157 framePtr(buffer->begin()),
158 stackPtr(buffer->end()),
159 deleteBufferWhenDone(true)
166 framePtr(v.framePtr),
167 stackPtr(v.stackPtr),
168 deleteBufferWhenDone(false)
175 : buffer(new BufferType(n)),
176 framePtr(buffer->begin()),
177 stackPtr(buffer->end()),
178 deleteBufferWhenDone(true)
186 : buffer(new BufferType(n, initValue)),
187 framePtr(buffer->begin()),
188 stackPtr(buffer->end()),
189 deleteBufferWhenDone(true)
197 : buffer(new BufferType(otherBuffer)),
198 framePtr(buffer->begin() + framePtrOffset),
199 stackPtr(buffer->end()),
200 deleteBufferWhenDone(true)
207 ROSE_ASSERT(deleteBufferWhenDone == (buffer != NULL));
208 if (deleteBufferWhenDone)
286 return end() - begin();
331 throw std::out_of_range(
"StackFrameVector: index out of range");
340 throw std::out_of_range(
"StackFrameVector: index out of range");
362 return *(stackPtr - 1);
369 return *(stackPtr - 1);
383 ROSE_ASSERT(buffer != NULL);
385 if (framePtr == buffer->end())
387 buffer->push_back(x);
390 framePtr = stackPtr = buffer->end();
410 framePtr = stackPtr - frameSize;
417 ROSE_ASSERT(buffer != NULL);
418 return stackPtr - buffer->begin();
425 ROSE_ASSERT(buffer != NULL);
426 framePtr = stackPtr = buffer->begin();
447 <<
"framePtr offset: " << framePtr - buffer->begin()
448 <<
" stackPtr offset: " << stackPtr - buffer->begin()
449 <<
" size: " << size()
450 <<
" buffer size: " << buffer->size()
452 s <<
"buffer:" <<
"\n";
454 for (i = buffer->begin(); i != buffer->end(); ++i)
455 s << (
void *) *i <<
' ';