class TileCache :public IlvTileCache { public: TileCache(int size); TileCache::TileCache(IlvInputFile& file); virtual void tileAboutToLoad(IlvTile *); virtual void tileCached(IlvTile *); virtual void tileRetrieved(class IlvTile *); virtual void controllerDeleted(IlvTileController *); virtual void write(IlvOutputFile& output) const; private: int _size; IlList _tiles; }; |
TileCache::TileCache(int size) :IlvTileCache(), _size(size) { } |
TileCache::TileCache(IlvInputFile& file) :IlvTileCache() { file.getStream() >> _size; } |
void TileCache::write(IlvOutputFile& output) const { output.getStream() << _size; } |
void TileCache::tileCached(IlvTile *tile) { _tiles.append(tile); } |
void TileCache::tileRetrieved(IlvTile* tile) { _tiles.remove(tile); } |
void TileCache::tileAboutToLoad(IlvTile *tile) { int toRemove = _tiles.length() - _size; if (toRemove <= 0) return; for (int i = toRemove; i > 0; i--) { IlvTile* current = (IlvTile*)_tiles[0]; _tiles.remove(current); releaseTile(current); } } |
void TileCache::controllerDeleted(IlvTileController* controller) { IlvLink* l; l = _tiles.getFirst(); IlvTile* tile; while (l) { tile = (IlvTile*) l->getValue(); l = l->getNext(); if (tile->getController() == controller) _tiles.remove(tile); } } |