{
pbqp_edge *edge = get_edge(pbqp, src_index, tgt_index);
+ if (tgt_index < src_index) {
+ pbqp_matrix_transpose(pbqp, costs);
+ add_edge_costs(pbqp, tgt_index, src_index, costs);
+ return;
+ }
+
if (edge == NULL) {
edge = alloc_edge(pbqp, src_index, tgt_index, costs);
} else {
return copy;
}
+void pbqp_matrix_transpose(pbqp *pbqp, pbqp_matrix *mat)
+{
+ unsigned len;
+
+ assert(mat);
+ len = mat->rows * mat->cols;
+
+ pbqp_matrix *tmp = pbqp_matrix_copy_and_transpose(pbqp, mat);
+
+ memcpy(mat, tmp, sizeof(*mat) + sizeof(*mat->entries) * len);
+
+ obstack_free(&pbqp->obstack, tmp);
+}
+
void pbqp_matrix_add(pbqp_matrix *sum, pbqp_matrix *summand)
{
int i;
pbqp_matrix *pbqp_matrix_copy_and_transpose(pbqp *pbqp, pbqp_matrix *m);
+void pbqp_matrix_transpose(pbqp *pbqp, pbqp_matrix *mat);
+
/* sum += summand */
void pbqp_matrix_add(pbqp_matrix *sum, pbqp_matrix *summand);