#include "optFileWriter.h"
optFileWriter::optFileWriter(char *what_file, nodes *what_nodes) {
filename = strdup(what_file);
my_nodes = what_nodes;
}
optFileWriter::~optFileWriter() {
free(filename);
}
void optFileWriter::write() {
FILE *outfile = fopen(filename, "w");
char *header =
"\n\n";
fwrite(header, strlen(header), 1, outfile);
write_nodes(outfile);
fwrite("\n", 13, 1, outfile);
fclose(outfile);
}
void optFileWriter::write_nodes(FILE *outfile) {
for (int i = 0; i < my_nodes->number_of_nodes(); i++) {
char *temp = itoa(i);
my_nodes->get_node(i)->set_export_id(temp);
delete temp;
}
node *temp_node;
for (int temp = 0; temp < my_nodes->number_of_nodes(); temp++) {
temp_node = my_nodes->get_node(temp);
fprintf(outfile, " \n");
fprintf(outfile, " %s\n", temp_node->get_export_id());
fprintf(outfile, " %s\n", temp_node->get_name());
fprintf(outfile, " %f\n", temp_node->x_pos);
fprintf(outfile, " %f\n", temp_node->y_pos);
fprintf(outfile, " \n");
std::vector links = temp_node->get_connections();
for (int i = 0; i < links.size(); i++) {
fprintf(outfile, " %s\n", links[i]->get_export_id());
}
fprintf(outfile, " \n");
fprintf(outfile, " \n");
}
}
// Utility methods
char *optFileWriter::itoa(int value) {
char *string_value = 0;
if (value > 0) return digit(value, string_value);
if (value == 0) {
char *temp = new char[2];
temp[0] = '0';
temp[1] = '\0';
return temp;
}
value = -value;
string_value = digit(value, string_value);
char *temp = new char[strlen(string_value) + 2];
temp[0] = (char) 45;
temp[1] = 0;
return strcat(temp, string_value);
}
char *optFileWriter::digit(int value, char *string_val) {
if (value == 0)
return string_val;
int digitval;
int charval;
switch(value % 10) {
case 0: charval = 48; digitval = 0; break;
case 1: charval = 49; digitval = 1; break;
case 2: charval = 50; digitval = 2; break;
case 3: charval = 51; digitval = 3; break;
case 4: charval = 52; digitval = 4; break;
case 5: charval = 53; digitval = 5; break;
case 6: charval = 54; digitval = 6; break;
case 7: charval = 55; digitval = 7; break;
case 8: charval = 56; digitval = 8; break;
case 9: charval = 57; digitval = 9; break;
}
char *temp;
if (string_val != 0)
temp = new char[strlen(string_val) + 2];
else
temp = new char[2];
temp[0] = (char) charval;
temp[1] = 0;
if (string_val != 0) {
strcat(temp, string_val);
delete string_val;
}
value = (value - digitval) / 10;
return digit(value, temp);
}
char *optFileWriter::kill_quotes(char *line) {
char *tick = "'";
char *quote_pos;
while (strstr(line, "\"") != 0) {
quote_pos = strstr(line, "\"");
*quote_pos = *tick;
}
return line;
}