typedef typename Vector<S>::value_type value_type;
typedef typename Vector<S>::pointer pointer;
value_type pop() {
- if (!count)
+ if (Vector<S>::empty())
return value_type();
value_type result = items[--count];
value_type top() const {
return count ? items[count - 1] : value_type();
}
+
+ void push(S item) {
+ Vector<S>::push_back(item);
+ }
};
#endif /* SQUID_STACK_H */
void *
MemPoolMalloc::allocate()
{
- void *obj = freelist.pop();
+ void *obj = NULL;
+ if (!freelist.empty()) {
+ obj = freelist.top();
+ freelist.pop();
+ }
if (obj) {
memMeterDec(meter.idle);
++saved_calls;
if (doZero)
memset(obj, 0, obj_size);
memMeterInc(meter.idle);
- freelist.push_back(obj);
+ freelist.push(obj);
}
}
void
MemPoolMalloc::clean(time_t maxage)
{
- while (void *obj = freelist.pop()) {
+ while (!freelist.empty()) {
+ void *obj = freelist.top();
+ freelist.pop();
memMeterDec(meter.idle);
memMeterDec(meter.alloc);
xfree(obj);
if (calls.size() > 1000)
return;
- calls.push_back(new CBDataCall(label, aFile, aLine));
+ calls.push(new CBDataCall(label, aFile, aLine));
}
dlink_node link;
cbdata::~cbdata()
{
#if USE_CBDATA_DEBUG
- CBDataCall *aCall;
- while ((aCall = calls.pop()))
- delete aCall;
+ while (!calls.empty()) {
+ delete calls.top();
+ calls.pop();
+ }
#endif
// lock the entry until rebuilding is done
lock("storeLateRelease");
setReleaseFlag();
- LateReleaseStack.push_back(this);
+ LateReleaseStack.push(this);
} else {
destroyStoreEntry(static_cast<hash_link *>(this));
// "this" is no longer valid
return;
}
+ // TODO: this works but looks unelegant.
for (i = 0; i < 10; ++i) {
- e = LateReleaseStack.empty() ? NULL : LateReleaseStack.pop();
+ if (LateReleaseStack.empty()) {
+ e = NULL;
+ } else {
+ e = LateReleaseStack.top();
+ LateReleaseStack.pop();
+ }
if (e == NULL) {
/* done! */