79
PieceDataPtr Cache::findPiece(Chunk* c,Uint32 off,Uint32 len)
90
PieceData::Ptr Cache::findPiece(Chunk* c,Uint32 off,Uint32 len,bool read_only)
81
QMultiMap<Chunk*,PieceData*>::iterator i = piece_cache.find(c);
92
PieceCache::iterator i = piece_cache.find(c);
82
93
while (i != piece_cache.end() && i.key() == c)
84
PieceData* cp = i.value();
85
if (cp->offset() == off && cp->length() == len)
86
return PieceDataPtr(cp);
95
PieceData::Ptr cp = i.value();
96
if (cp->offset() == off && cp->length() == len && !(!cp->writeable() && !read_only))
97
return PieceData::Ptr(cp);
101
return PieceData::Ptr();
93
void Cache::insertPiece(Chunk* c,PieceData* p)
104
void Cache::insertPiece(Chunk* c,PieceData::Ptr p)
95
106
piece_cache.insert(c,p);
98
109
void Cache::clearPieces(Chunk* c)
100
QMultiMap<Chunk*,PieceData*>::iterator i = piece_cache.find(c);
111
PieceCache::iterator i = piece_cache.find(c);
101
112
while (i != piece_cache.end() && i.key() == c)
103
PieceData* cp = i.value();
105
114
i = piece_cache.erase(i);
109
118
void Cache::clearPieceCache()
111
QMultiMap<Chunk*,PieceData*>::iterator i = piece_cache.begin();
120
PieceCache::iterator i = piece_cache.begin();
112
121
while (i != piece_cache.end())
114
PieceData* cp = i.value();
121
void Cache::clearPiece(PieceData* p)
123
Chunk* c = p->parentChunk();
124
QMultiMap<Chunk*,PieceData*>::iterator i = piece_cache.find(p->parentChunk());
125
while (i != piece_cache.end() && i.key() == c)
129
PieceData* cp = i.value();
131
piece_cache.erase(i);
123
if (!i.value()->inUse())
124
i = piece_cache.erase(i);
141
133
Uint64 freed = 0;
142
QMultiMap<Chunk*,PieceData*>::iterator i = piece_cache.begin();
134
PieceCache::iterator i = piece_cache.begin();
143
135
while (i != piece_cache.end())
145
PieceData* cp = i.value();
137
if (!i.value()->inUse())
148
freed += cp->length();
139
freed += i.value()->length();
150
140
i = piece_cache.erase(i);
154
// Out(SYS_GEN|LOG_DEBUG) << "PieceCache: " << i.key()->getIndex() << " " << cp->offset() << " " << cp->length() << " " << cp->ref_count << endl;
144
mem += i.value()->length();