From: Francesco Chemolli Date: Fri, 2 Jan 2015 17:13:46 +0000 (+0100) Subject: Updated DelayTagged and DelayUser from SplayNode to Splay API X-Git-Tag: merge-candidate-3-v1~384^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d6349cfb3cdb52c456de3d5f6abfd4805df4712a;p=thirdparty%2Fsquid.git Updated DelayTagged and DelayUser from SplayNode to Splay API --- diff --git a/src/DelayTagged.cc b/src/DelayTagged.cc index 4d01d1c48a..6f695c4315 100644 --- a/src/DelayTagged.cc +++ b/src/DelayTagged.cc @@ -40,7 +40,7 @@ static Splay::SPLAYFREE DelayTaggedFree; DelayTagged::~DelayTagged() { DelayPools::deregisterForUpdates (this); - buckets->destroy (DelayTaggedFree); + buckets.destroy(DelayTaggedFree); } static Splay::SPLAYCMP DelayTaggedCmp; @@ -58,7 +58,7 @@ DelayTaggedFree(DelayTaggedBucket::Pointer &) struct DelayTaggedStatsVisitor { StoreEntry *sentry; - explicit DelayTaggedStatsVisitor(StoreEntry *se) sentry(se) {} + explicit DelayTaggedStatsVisitor(StoreEntry *se): sentry(se) {} void operator() (DelayTaggedBucket::Pointer const ¤t) { current->stats(sentry); } @@ -105,11 +105,20 @@ DelayTaggedUpdateWalkee(DelayTaggedBucket::Pointer const ¤t, void *state) const_cast(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(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(); } @@ -185,7 +194,7 @@ DelayTagged::Id::Id(DelayTagged::Pointer aDelayTagged, String &aTag) : theTagged } theBucket->theBucket.init(theTagged->spec); - theTagged->buckets.head = theTagged->buckets.head->insert (theBucket, DelayTaggedCmp); + theTagged->buckets.insert (theBucket, DelayTaggedCmp); } DelayTagged::Id::~Id() diff --git a/src/DelayUser.cc b/src/DelayUser.cc index 5e62bffd1b..5cccae9deb 100644 --- a/src/DelayUser.cc +++ b/src/DelayUser.cc @@ -42,7 +42,7 @@ static Splay::SPLAYFREE DelayUserFree; DelayUser::~DelayUser() { DelayPools::deregisterForUpdates (this); - buckets.head->destroy (DelayUserFree); + buckets.destroy(DelayUserFree); } static Splay::SPLAYCMP DelayUserCmp; @@ -68,6 +68,14 @@ DelayUserStatsWalkee(DelayUserBucket::Pointer const ¤t, void *state) current->stats ((StoreEntry *)state); } +struct DelayUserStatsVisitor { + StoreEntry *se; + explicit DelayUserStatsVisitor(StoreEntry *s) : se(s) {} + void operator() (DelayUserBucket::Pointer const ¤t) { + current->stats(se); + } +}; + void DelayUser::stats(StoreEntry * sentry) { @@ -78,12 +86,13 @@ DelayUser::stats(StoreEntry * sentry) storeAppendPrintf(sentry, "\t\tCurrent: "); - if (!buckets.head) { + if (buckets.empty()) { storeAppendPrintf (sentry, "Not used yet.\n\n"); return; } - buckets.head->walk(DelayUserStatsWalkee, sentry); + DelayUserStatsVisitor visitor(sentry); + buckets.visit(visitor); storeAppendPrintf(sentry, "\n\n"); } @@ -108,11 +117,20 @@ DelayUserUpdateWalkee(DelayUserBucket::Pointer const ¤t, void *state) const_cast(current.getRaw())->theBucket.update(t->spec, t->incr); } +struct DelayUserUpdateVisitor { + DelayUserUpdater *t; + DelayUserUpdateVisitor(DelayUserUpdater *updater) : t(updater) {} + void operator() (DelayUserBucket::Pointer const ¤t) { + const_cast(current.getRaw())->theBucket.update(t->spec, t->incr); + } +}; + void DelayUser::update(int incr) { DelayUserUpdater updater(spec, incr); - buckets.head->walk (DelayUserUpdateWalkee, &updater); + DelayUserUpdateVisitor visitor(&updater); + buckets.visit(visitor); } void @@ -188,7 +206,7 @@ DelayUser::Id::Id(DelayUser::Pointer aDelayUser, Auth::User::Pointer aUser) : th } theBucket->theBucket.init(theUser->spec); - theUser->buckets.head = theUser->buckets.head->insert (theBucket, DelayUserCmp); + theUser->buckets.insert (theBucket, DelayUserCmp); } DelayUser::Id::~Id()