4 #include "pbqp_edge_t.h"
5 #include "pbqp_node_t.h"
6 #include "html_dumper.h"
11 static void dump_vector(FILE *f, vector *vec)
16 fprintf(f, "<span class=\"vector\">( ");
17 unsigned len = vec->len;
19 for (index = 0; index < len; ++index) {
20 fprintf(f, "%6d", vec->entries[index].data);
22 fprintf(f, " )</span>\n");
25 static void dump_matrix(FILE *f, pbqp_matrix *mat)
29 num *p = mat->entries;
31 assert(mat->cols > 0);
32 assert(mat->rows > 0);
33 fprintf(f, "\t\\begin{pmatrix}\n");
34 for (row = 0; row < mat->rows; ++row) {
35 fprintf(f, "\t %6d", *p++);
36 for (col = 1; col < mat->cols; ++col) {
37 fprintf(f, "& %6d", *p++);
41 fprintf(f, "\t\\end{pmatrix}\n");
44 static void dump_edge_costs(pbqp *pbqp)
49 assert(pbqp->dump_file);
51 fputs("<p>", pbqp->dump_file);
52 for (src_index = 0; src_index < pbqp->num_nodes; ++src_index) {
53 pbqp_node *src_node = get_node(pbqp, src_index);
55 unsigned len = ARR_LEN(src_node->edges);
56 for (edge_index = 0; edge_index < len; ++edge_index) {
57 pbqp_edge *edge = src_node->edges[edge_index];
58 unsigned tgt_index = edge->tgt;
59 if (src_index < tgt_index) {
60 fputs("<tex>\n", pbqp->dump_file);
61 fprintf(pbqp->dump_file, "\t\\overline\n{C}_{%d,%d}=\n",
62 src_index, tgt_index);
63 dump_matrix(pbqp->dump_file, edge->costs);
64 fputs("</tex><br>", pbqp->dump_file);
68 fputs("</p>", pbqp->dump_file);
71 static void dump_node_costs(pbqp *pbqp)
76 assert(pbqp->dump_file);
79 fputs("<p>", pbqp->dump_file);
80 for (index = 0; index < pbqp->num_nodes; ++index) {
81 pbqp_node *node = get_node(pbqp, index);
82 fprintf(pbqp->dump_file, "\tc<sub>%d</sub> = ", index);
83 dump_vector(pbqp->dump_file, node->costs);
84 fputs("<br>\n", pbqp->dump_file);
86 fputs("</p>", pbqp->dump_file);
89 static void dump_section(FILE *f, int level, char *txt)
93 fprintf(f, "<h%d>%s</h%d>\n", level, txt, level);
96 void dump_graph(pbqp *pbqp)
100 assert(pbqp != NULL);
101 assert(pbqp->dump_file != NULL);
103 fputs("<p>\n<graph>\n\tgraph input {\n", pbqp->dump_file);
104 for (src_index = 0; src_index < pbqp->num_nodes; ++src_index) {
105 fprintf(pbqp->dump_file, "\t n%d;\n", src_index);
108 for (src_index = 0; src_index < pbqp->num_nodes; ++src_index) {
109 pbqp_node *node = get_node(pbqp, src_index);
110 unsigned len = ARR_LEN(node->edges);
112 for (edge_index = 0; edge_index < len; ++edge_index) {
113 unsigned tgt_index = node->edges[edge_index]->tgt;
115 if (src_index < tgt_index) {
116 fprintf(pbqp->dump_file, "\t n%d -- n%d;\n", src_index,
121 fputs("\t}\n</graph>\n</p>\n", pbqp->dump_file);
124 void dump_input(pbqp *pbqp)
127 assert(pbqp->dump_file);
129 dump_section(pbqp->dump_file, 1, "1. PBQP Problem");
130 dump_section(pbqp->dump_file, 2, "1.1 Topology");
132 dump_section(pbqp->dump_file, 2, "1.2 Cost Vectors");
133 dump_node_costs(pbqp);
134 dump_section(pbqp->dump_file, 2, "1.3 Cost Matrices");
135 dump_edge_costs(pbqp);