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); }
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; }
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; }