/* Web Polygraph       http://www.web-polygraph.org/
 * (C) 2003-2006 The Measurement Factory
 * Licensed under the Apache License, Version 2.0 */

#ifndef POLYGRAPH__CACHE_CACHEENTRY_H
#define POLYGRAPH__CACHE_CACHEENTRY_H

#include "xstd/Queue.h"
#include "base/ObjId.h"

class Cache;
class DistrPoint;

// a central point for information about all objects handled by the cache

class CacheEntry: public QueueItem {
	public:
		friend class DistrPoint;

	public:
		CacheEntry();
		CacheEntry(const ObjId &anId);
		~CacheEntry();

		void reset();

		const ObjId &id() const { return theId; }
		DistrPoint *distrPoint() { return theDistrPoint; }
		Size objSize() const { return theObjSize; }
		bool cached() const { return !isolated(); }
		bool stray() const { return isolated() && !theDistrPoint; }

		DistrPoint *startDistributing(Cache *cache);
		void stopDistributing(DistrPoint *dp);

		void id(const ObjId &anId) { theId = anId; }
		void objSize(Size sz) { theObjSize = sz; }

	public: /* XXX */
		CacheEntry *nextInIdx; // next entry in cache index

	protected:
		DistrPoint *theDistrPoint;   // for active entries only
		ObjId theId;
		Size theObjSize;             // negative if yet unknown

};

#endif


syntax highlighted by Code2HTML, v. 0.9.1