// WARNING: SetCapacity can get called before Init()
void
nsMemoryCacheDevice::SetCapacity(PRInt32  capacity)
{
    PRInt32 hardLimit = capacity * 1024;  // convert k into bytes
    PRInt32 softLimit = (hardLimit * 9) / 10;
    AdjustMemoryLimits(softLimit, hardLimit);
}
// WARNING: SetCapacity can get called before Init()
void
nsMemoryCacheDevice::SetCapacity(int32_t  capacity)
{
    int32_t hardLimit = capacity * 1024;  // convert k into bytes
    int32_t softLimit = (hardLimit * 9) / 10;
    AdjustMemoryLimits(softLimit, hardLimit);
}
//----------------------------------------------------------------------------------
bool TrKMclass::Process()
{
	if(!initialized)
		return false;

	if(!AdjustMemoryLimits())
		return false;
		
	//w1.startTimer();

	//// Create monitors
	mm = new CMemoryMonitor(max_mem_size);
	//bo = new CBinOrdering(n_bins);

	//// Create queues
	int n_splitters_read = 1;
	pkmer  = new CPartKMERQueue(max_mem_seqKMER); // wczytany plik z kmerami	


		

	// ---------------------------------- kmers -------------

	//new -----------------
	bin_kmers = new CBinKmers_all_new(n_splitters, kmer_len, num_kmer, max_mem_binsKMER);
	w_splittersKMER.resize(n_splitters); 
	for(int i = 0; i < n_splitters; ++i)
	{
		w_splittersKMER[i] = new CWKmersSplitter_new(mm, pkmer, bin_kmers, kmer_len, prefix_len); //wstawianie kmerow do koszy
		gr2.create_thread(boost::ref(*w_splittersKMER[i]));
	}
	

	w_kmers = new CWKmersReader(mm, data_file_name, kmers_buffer_size, pkmer, kmer_len, bin_kmers->fun_start_prefix());
	gr1.create_thread(boost::ref(*w_kmers));
	
	gr1.join_all(); //  read kmers
	gr2.join_all();	//	split kmers
	
	delete w_kmers;
	for(int i = 0; i < n_splitters; ++i)
	{
		delete w_splittersKMER[i];
	}

	//w1.stopTimer();
	cout << "\n";

	//w2.startTimer();
	SaveOutFile();


	
	// ----------------------------------------------------
	//delete pread;
	delete pkmer;
	delete bin_kmers;

	//delete bpq;
	//delete bd;
	//delete bq;	
	//delete kq;

	//w2.stopTimer();

	return true;
}