1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
#include "IconCache.h"
#include "Icon.h"
#include "IconLoader.h"
Icon *IconCache::Find(char name) {
Chain *e = first;
while (e) {
if (((Icon*)e)->Name() == name) {
// cout << " fount " << ((Icon*)e)->Name() << "(" << name << ") ";
hit++;
return (Icon*)e;
}
else e = e->select();
}
miss++;
return 0;
}
void IconCache::Insert(Chain *i) {
if (!i) return;
if (fill+1 == max) CleanUp();
i->append(first);
fill++;
first = i;
}
void IconCache::CleanUp() {
clean++;
Chain *e = first;
for (unsigned i=0; (i<min) && e; i++) e = e->select();
if (!e) return;
Chain *t;
do {
t = e->select();
e->append(t->select());
delete (Icon*)t;
fill--;
e = e->select();
} while (e);
}
|