// delete expired tiles void datacloud::deleteexpiredtiles() { double time; tilecacheelem *tile,*next; if (EXPIRE==0.0) return; time=minitime(); tile=TILECACHE; // check all tiles while (tile!=NULL) { next=tile->next; if (tile->isavailable && tile->refcount==0) { double idle=time-tile->access; if (idle>60*EXPIRE) deletetile(tile); } tile=next; } }
// delete delayed tiles void datacloud::deletedelayedtiles() { tilecacheelem *tile,*next; if (MAXDELAY==0.0) return; tile=TILECACHE; // check all tiles while (tile!=NULL) { next=tile->next; if (tile->isdelayed && tile->refcount==0) deletetile(tile); tile=next; } }
// shrink cache to maximum allowed size void datacloud::shrinkcache(double maxsize) { double totalsize; tilecacheelem *tile,*next; if (maxsize==0.0) return; totalsize=0.0; tile=TILECACHE; // sum up all tiles while (tile!=NULL) { if (tile->isavailable) totalsize+=tile->tile->bytes; tile=tile->next; } tile=TILECACHE; // delete old tiles while (tile!=NULL && totalsize>maxsize) { next=tile->next; if (tile->isavailable && tile->refcount==0) { totalsize-=tile->tile->bytes; deletetile(tile); } tile=next; } }