/*
- * Copyright (C) 1996-2014 The Squid Software Foundation and contributors
+ * Copyright (C) 1996-2018 The Squid Software Foundation and contributors
*
* Squid software is distributed under GPLv2+ license and includes
* contributions from numerous individuals and organizations.
#include "NullDelayId.h"
#include "Store.h"
-void *
-DelayTagged::operator new(size_t size)
-{
- DelayPools::MemoryUsed += sizeof (DelayTagged);
- return ::operator new (size);
-}
-
-void
-DelayTagged::operator delete (void *address)
-{
- DelayPools::MemoryUsed -= sizeof (DelayTagged);
- ::operator delete (address);
-}
-
DelayTagged::DelayTagged()
{
DelayPools::registerForUpdates (this);
}
-static SplayNode<DelayTaggedBucket::Pointer>::SPLAYFREE DelayTaggedFree;
+static Splay<DelayTaggedBucket::Pointer>::SPLAYFREE DelayTaggedFree;
DelayTagged::~DelayTagged()
{
DelayPools::deregisterForUpdates (this);
- buckets.head->destroy (DelayTaggedFree);
+ buckets.destroy(DelayTaggedFree);
}
-static SplayNode<DelayTaggedBucket::Pointer>::SPLAYCMP DelayTaggedCmp;
+static Splay<DelayTaggedBucket::Pointer>::SPLAYCMP DelayTaggedCmp;
int
DelayTaggedCmp(DelayTaggedBucket::Pointer const &left, DelayTaggedBucket::Pointer const &right)
DelayTaggedFree(DelayTaggedBucket::Pointer &)
{}
-void
-DelayTaggedStatsWalkee(DelayTaggedBucket::Pointer const ¤t, void *state)
-{
- current->stats ((StoreEntry *)state);
-}
+struct DelayTaggedStatsVisitor {
+ StoreEntry *sentry;
+ explicit DelayTaggedStatsVisitor(StoreEntry *se): sentry(se) {}
+ void operator() (DelayTaggedBucket::Pointer const ¤t) {
+ current->stats(sentry);
+ }
+};
void
DelayTagged::stats(StoreEntry * sentry)
storeAppendPrintf(sentry, "\t\tCurrent: ");
- if (!buckets.head) {
+ if (buckets.empty()) {
storeAppendPrintf (sentry, "Not used yet.\n\n");
return;
}
- buckets.head->walk(DelayTaggedStatsWalkee, sentry);
+ DelayTaggedStatsVisitor visitor(sentry);
+ buckets.visit(visitor);
storeAppendPrintf(sentry, "\n\n");
}
const_cast<DelayTaggedBucket *>(current.getRaw())->theBucket.update(t->spec, t->incr);
}
+struct DelayTaggedUpdateVisitor {
+ DelayTaggedUpdater *updater;
+ explicit DelayTaggedUpdateVisitor(DelayTaggedUpdater *u) : updater(u) {}
+ void operator() (DelayTaggedBucket::Pointer const ¤t) {
+ const_cast<DelayTaggedBucket *>(current.getRaw())->theBucket.update(updater->spec, updater->incr);
+ }
+};
+
void
DelayTagged::update(int incr)
{
DelayTaggedUpdater updater(spec, incr);
- buckets.head->walk (DelayTaggedUpdateWalkee, &updater);
+ DelayTaggedUpdateVisitor visitor(&updater);
+ buckets.visit(visitor);
kickReads();
}
return new Id(this, details.tag);
}
-void *
-DelayTagged::Id::operator new(size_t size)
-{
- DelayPools::MemoryUsed += sizeof (Id);
- return ::operator new (size);
-}
-
-void
-DelayTagged::Id::operator delete (void *address)
-{
- DelayPools::MemoryUsed -= sizeof (Id);
- ::operator delete (address);
-}
-
-void *
-DelayTaggedBucket::operator new(size_t size)
-{
- DelayPools::MemoryUsed += sizeof (DelayTaggedBucket);
- return ::operator new (size);
-}
-
-void
-DelayTaggedBucket::operator delete (void *address)
-{
- DelayPools::MemoryUsed -= sizeof (DelayTaggedBucket);
- ::operator delete (address);
-}
-
DelayTaggedBucket::DelayTaggedBucket(String &aTag) : tag (aTag)
{
debugs(77, 3, "DelayTaggedBucket::DelayTaggedBucket");
}
theBucket->theBucket.init(theTagged->spec);
- theTagged->buckets.head = theTagged->buckets.head->insert (theBucket, DelayTaggedCmp);
+ theTagged->buckets.insert (theBucket, DelayTaggedCmp);
}
DelayTagged::Id::~Id()