Ejemplo n.º 1
0
void DArray_shuffle(DArray array)
{
  if (!array || !(array->size > 1)) return;

  size_t i, j;

  if (array->size == 2) {
    //unsigned int rand = random_seq();
    //i = (size_t) (rand % 2);
    //if (i == 0)
      swap(array->contents, array->contents, 0, 1);
  } else {
    for (j = array->size - 1; j > 1; j--)
    {
      i = (random_seq() % j) + 1;
      swap(array->contents, array->contents, i - 1, j - 1);
    }
  }
}
Ejemplo n.º 2
0
Archivo: main.cpp Proyecto: Ryzh/voc
bool on_key_press(char c)
{
	bool bNeedUpdate = false;
	QVector<word_t*>* vec;
	vec = bTickMode ? &tick_vec : &word_vec;
	int& index = bTickMode ? iTickIndex : iCurrIndex;

	switch(c)
	{
		case 't'://tick
			(*vec)[seq_vec[index]]->tick();
			bNeedUpdate = true;
			break; 
		case '+'://inc marks
			(*vec)[seq_vec[index]]->inc_marks();
			bNeedUpdate = true;
			break;
		case '-'://dec marks
			(*vec)[seq_vec[index]]->dec_marks();
			bNeedUpdate = true;
			break;
		case 'R'://ramdon
			if (bRandomMode)
				init_seq();
			else
				random_seq();
			bNeedUpdate = true;
			break;
		case 'q'://quit
			eScrType = scr_confquit;
			bNeedUpdate = true;
			break;
		case '>':
			eScrType = scr_confexport;
			bNeedUpdate = true;
			break;
		case '~'://remove ticked items
			eScrType = scr_confdelete;
			bNeedUpdate = true;
			break;
		case 'j'://next
			if (eScrType == scr_list)
			{
				if (++index >= vec->count())
				{
					--index;
				}
				bNeedUpdate = true;
				break;
			}
			else if (eScrType == scr_def)
			{
				iDefFirstLine++;
				bNeedUpdate = true;
				break;
			}
			break;
		case 'k'://previous
			if (eScrType == scr_list)
			{
				if (--index < 0)
				{
					++index;
				}
				bNeedUpdate = true;
			}
			else if (eScrType == scr_def)
			{
				iDefFirstLine --;
				bNeedUpdate = true;
				break;
			}
			break;
		case ' '://space
			if (eScrType == scr_list)
			{
				if (++index >= vec->count())
				{
					--index;
				}
				bNeedUpdate = true;
			}
			bNeedUpdate = true;
			break;
		case '\n'://enter
			if (eScrType == scr_list)
			{
				eScrType = scr_def;
				bNeedUpdate = true;
				break;
			}
			else if (eScrType == scr_def)
			{
				eScrType = scr_list;
				bNeedUpdate = true;
				break;
			}
			else if (eScrType == scr_confquit)
			{
				bQuit = true;
				break;
			}
			break;
		case 27:
			if (eScrType == scr_list)
			{
				eScrType = scr_confquit;
				bNeedUpdate = true;
				break;
			}
			else if (eScrType == scr_def)
			{
				eScrType = scr_list;
				bNeedUpdate = true;
				break;
			}
			else if (eScrType == scr_confquit)
			{
				eScrType = bDefMode ? scr_def : scr_list;
				bNeedUpdate = true;
				break;
			}
		case '*'://show tick screen
			iCurrIndex = iTickIndex = 0;
			if (bTickMode = !bTickMode)
				gen_tick_vec();
			init_seq();
			bNeedUpdate = true;
			break;
		case 'y':
			if (eScrType == scr_confquit)
			{
				bQuit = true;
			}
			else if (eScrType == scr_confexport)
			{
				QString file = file_name;
				int pos = file.lastIndexOf("/");
				if (pos > 0)
					file.replace(pos, -1, "extracted.xml");
				else
					file = "extracted.xml";
				//regenerate the tick vec and merge it to the file
				gen_tick_vec();
				merge_vec_to_file(tick_vec, file);	
				eScrType = scr_list;
				bNeedUpdate = true;
			}
			else if (eScrType == scr_confdelete)
			{
				//regenerate the tick vec and merge it to the file
				gen_tick_vec();
				remove_ticked();	
				eScrType = scr_list;
				bNeedUpdate = true;
			}	
			break;
		case 'n':
			if (eScrType == scr_confquit || eScrType == scr_confexport)
			{
				eScrType = bDefMode ? scr_def : scr_list;
				bNeedUpdate = true;
				break;
			}
			break;
		case 'C':
			for (int i = 0; i < word_vec.count(); i++)
			{
				word_vec[i]->ticked = false;
			}
			bNeedUpdate = true;
			break;
		case 'H':
			bCnMode = !bCnMode;
			bNeedUpdate = true;
			break;
		default:
			break; 
	}
	return bNeedUpdate;
}