Пример #1
0
gboolean _output_watch(GIOChannel *channel, GIOCondition cond, gpointer user_data) {
	gchar *string;
	size_t size;

	if(cond == G_IO_HUP) {
		g_io_channel_unref(channel);
		return(FALSE);
	}
	g_io_channel_read_line(channel, &string, &size, NULL, NULL);
	_parse_output(string);
//	printf("%s\n",string);
	g_free(string);
	return(TRUE);
}
Пример #2
0
bool cell_library::parse_cc_file(stringstream &ss) {
	string buff;
	cell* tar_cell;
	bool new_flag = false;
	std::regex e;
	std::smatch sm;

	while (getline(ss, buff)) {
		e = ("#(\\w+)");
		if (!std::regex_match(buff, sm, e))
			continue;

		tar_cell = find_cell(sm[1]);
		if (tar_cell == NULL) {
			new_flag = true;
			tar_cell = new cell;
		}

		if (new_flag)
			tar_cell->cell_name = sm[1];

		getline(ss, buff);
		if (new_flag) {
			_parse_inputs(buff, &tar_cell->input_pinlist, &tar_cell->map_input_pin, &tar_cell->input_num);
		}

		getline(ss, buff);
		if (new_flag) {
			_parse_output(buff, tar_cell->output_pin);
		}

		getline(ss, buff);
		_parse_01_vector(buff, tar_cell->cc1_array);

		getline(ss, buff);
		_parse_01_vector(buff, tar_cell->cc0_array);

		tar_cell->generate_truth_table();
		tar_cell->generate_backward_ref_table();
		tar_cell->generate_forward_ref_table();

		if (new_flag) {
			cell_list.push_back(tar_cell);
			map_cell[tar_cell->cell_name] = tar_cell;
		}
	}
	return true;
}
Пример #3
0
bool cell_library::parse_co_file(stringstream &ss) {
	string buff;
	int j;
	cell* tar_cell;
	bool new_flag = false;
	std::regex e;
	std::smatch sm;
	bitset<MAX_CELL_INPUTS_X2> co_vector(0);

	while (getline(ss, buff)) {
		e = ("#(\\w+)");
		if (!std::regex_match(buff, sm, e))
			continue;
		tar_cell = find_cell(sm[1]);
		if (tar_cell == NULL) {
			new_flag = true;
			tar_cell = new cell;
		}

		if (new_flag)
			tar_cell->cell_name = sm[1];

		getline(ss, buff);
		if (new_flag) {
			_parse_inputs(buff, &tar_cell->input_pinlist, &tar_cell->map_input_pin, &tar_cell->input_num);
		}

		tar_cell->co_array.resize(tar_cell->input_num);

		getline(ss, buff);
		if (new_flag) {
			_parse_output(buff, tar_cell->output_pin);
		}

		for (j = 0; j < tar_cell->input_num; j++) {
			getline(ss, buff);
			_parse_01_vector(buff, tar_cell->co_array[j]);
		}

		if (new_flag) {
			cell_list.push_back(tar_cell);
			map_cell[tar_cell->cell_name] = tar_cell;
		}
	}
	return true;
}