1 #include <wvdiskcache.h>
5 #define BYTESTOKB(x) (x + ((1 << 10) - 1)) >> 10
7 WvDiskCache::WvDiskCache(WvStringParm hashpath
, int megabytes
)
16 void WvDiskCache::add(WvStringParm path
, size_t size
)
20 backend
.add(path
, DCFileInfo(size
, head
, ""), true);
24 DCFileInfo fi
= backend
.find(head
);
26 backend
.add(head
, fi
, true);
38 cur_size
+= BYTESTOKB(size
);
42 void WvDiskCache::remove(WvString path
)
46 DCFileInfo fi
= backend
.find(path
);
49 cur_size
-= BYTESTOKB(fi
.size
);
51 if (path
== head
|| path
== tail
)
55 head
= xcount
? fi
.next
: WvString("");
59 tail
= xcount
? fi
.prev
: WvString("");
64 DCFileInfo pfi
= backend
.find(fi
.prev
);
66 backend
.add(fi
.prev
, pfi
, true);
68 DCFileInfo nfi
= backend
.find(fi
.prev
);
70 backend
.add(fi
.next
, nfi
, true);
77 void WvDiskCache::purge()
79 while (cur_size
> max_size
)
85 void WvDiskCache::set_max(int megabytes
)
87 max_size
= megabytes
* 1024;