Ejemplo n.º 1
0
func (cdbm *ArcCdbm) evict(f CacheCleanFunc) {
	var cdb base.CacheDirectoryBlock
	if cdbm.t1.size >= max(1, cdbm.target_t1) {
		cdb = cdbm.t1.RemoveLRU()
		acdb := cdb.(*ArcCdb)
		acdb.where = in_b1
		acdb.element = cdbm.b1.PushBack(acdb)
	} else {
		cdb = cdbm.t2.RemoveLRU()
		acdb := cdb.(*ArcCdb)
		acdb.where = in_b2
		acdb.element = cdbm.b2.PushBack(acdb)
	}
	object := cdb.GetObject()
	cdbm.Size -= object.Size()
	if f != nil {
		f(object)
	}
	cdb.SetObject(nil)
	return
}