Example #1
0
int optimize_tokens (token *tokens, int t) {
	int i, z, k;
	token tokens_tmp[500];

	/*Drop all lines before last '* 0'*/
	for (i = 0, z = -1; i < t; ++i) {
		if (tokens[i].operation == t_mul && tokens[i].type == literal && tokens[i].data.value == 0) {
			z = i;
			break;
		}
	}

	/*Drop '+ 0', '- 0', '* 1', '/ 1' tokens*/
	for (i = z + 1, k = 0; i < t; ++i) { //and start after the last '* 0'
		if (!(tokens[i].type == literal && 
			(
				(tokens[i].data.value == 0 && (tokens[i].operation == t_plus || tokens[i].operation == t_min)) ||
				(tokens[i].data.value == 1 && (tokens[i].operation == t_mul || tokens[i].operation == t_div))
			)
		)) {
			tokens_tmp[k++] = tokens[i];
		}
	}
	t = k; // update tokens counter

	/*update tokens array*/
	for (i = 0; i < t; ++i) {
		tokens[i] = tokens_tmp[i];
	}
	
	/*Convert divs and muls with powers of two to shifts*/
	for (i = 0; i < t; ++i) {
		if (tokens[i].type == literal && tokens[i].operation == t_mul && is_power_of_2(tokens[i].data.value)) {
			tokens[i].operation = t_shl;
			tokens[i].data.value = shift_times(tokens[i].data.value);
		}
		
		else if (tokens[i].type == literal && tokens[i].operation == t_div && is_power_of_2(tokens[i].data.value)) {
			tokens[i].operation = t_shr;
			tokens[i].data.value = shift_times(tokens[i].data.value);
		}
	}

	return t;
}
Example #2
0
void ShiftTimesDialog::buttonClicked(QAbstractButton* button)
{
	int amount;

	if (ui.buttonBox->buttonRole(button) == QDialogButtonBox::AcceptRole){
		amount = ui.timeEdit->time().hour() * 3600 + ui.timeEdit->time().minute() * 60;
		if (ui.backwards->isChecked())
			amount *= -1;
		if (amount != 0) {
			// DANGER, DANGER - this could get our dive_table unsorted...
			shift_times(amount);
			sort_table(&dive_table);
			mark_divelist_changed(TRUE);
			mainWindow()->dive_list()->rememberSelection();
			mainWindow()->refreshDisplay();
			mainWindow()->dive_list()->restoreSelection();
		}
	}
}