ChunkManager::Private::Private(ChunkManager* p, Torrent& tor, const QString & tmpdir, const QString & datadir, bool custom_output_name, CacheFactory* fac) : p(p),chunks(tor.getNumChunks()),todo(tor.getNumChunks()) { during_load = false; todo.setAll(true); if (!fac) { if (tor.isMultiFile()) cache = new MultiFileCache(tor,tmpdir,datadir,custom_output_name); else cache = new SingleFileCache(tor,tmpdir,datadir); } else cache = fac->create(tor,tmpdir,datadir); cache->loadFileMap(); index_file = tmpdir + "index"; file_info_file = tmpdir + "file_info"; file_priority_file = tmpdir + "file_priority"; Uint64 tsize = tor.getTotalSize(); // total size Uint64 csize = tor.getChunkSize(); // chunk size Uint64 lsize = tsize - (csize * (tor.getNumChunks() - 1)); // size of last chunk for (Uint32 i = 0;i < tor.getNumChunks();i++) { if (i + 1 < tor.getNumChunks()) chunks[i] = new Chunk(i,csize,cache); else chunks[i] = new Chunk(i,lsize,cache); } chunks_left = 0; recalc_chunks_left = true; }