/* Web Polygraph http://www.web-polygraph.org/ * (C) 2003-2006 The Measurement Factory * Licensed under the Apache License, Version 2.0 */ #include "base/polygraph.h" #include "cache/DistrPoint.h" #include "cache/CacheEntry.h" #include "cache/Cache.h" CacheEntry::CacheEntry(): nextInIdx(0), theDistrPoint(0) { reset(); } CacheEntry::CacheEntry(const ObjId &anId): nextInIdx(0), theDistrPoint(0) { reset(); theId = anId; } CacheEntry::~CacheEntry() { // paranoid asserts to check that we cleaned the entry before // destroying it Assert(isolated()); Assert(!theDistrPoint); Assert(!nextInIdx); } void CacheEntry::reset() { Assert(!theDistrPoint); QueueItem::isolate(); theDistrPoint = 0; theId.reset(); theObjSize = -1; nextInIdx = 0; } DistrPoint *CacheEntry::startDistributing(Cache *cache) { Assert(cache); theDistrPoint = new DistrPoint(cache, this); // Farm these? if (theObjSize >= 0) theDistrPoint->noteDataReady(theObjSize); return theDistrPoint; } void CacheEntry::stopDistributing(DistrPoint *dp) { Assert(dp == theDistrPoint); Cache *cache = theDistrPoint->cache(); Assert(cache); delete theDistrPoint; theDistrPoint = 0; if (stray()) cache->noteStrayEntry(this); // will destroy }