aboutsummaryrefslogtreecommitdiff
path: root/dsf.c
diff options
context:
space:
mode:
Diffstat (limited to 'dsf.c')
-rw-r--r--dsf.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/dsf.c b/dsf.c
index 990fe94..f1bd61f 100644
--- a/dsf.c
+++ b/dsf.c
@@ -34,7 +34,7 @@ void dsf_copy(DSF *to, DSF *from)
memcpy(to->p, from->p, to->size * sizeof(int));
}
-DSF *snew_dsf(int size)
+DSF *dsf_new(int size)
{
DSF *ret = snew(DSF);
ret->size = size;
@@ -45,6 +45,9 @@ DSF *snew_dsf(int size)
return ret;
}
+DSF *dsf_new_min(int size) { return dsf_new(size); }
+DSF *dsf_new_flip(int size) { return dsf_new(size); }
+
void dsf_free(DSF *dsf)
{
if (dsf) {
@@ -55,24 +58,29 @@ void dsf_free(DSF *dsf)
int dsf_canonify(DSF *dsf, int index)
{
- return edsf_canonify(dsf, index, NULL);
+ return dsf_canonify_flip(dsf, index, NULL);
+}
+
+int dsf_minimal(DSF *dsf, int index)
+{
+ return dsf_canonify_flip(dsf, index, NULL);
}
bool dsf_equivalent(DSF *dsf, int i1, int i2)
{
- return edsf_canonify(dsf, i1, NULL) == edsf_canonify(dsf, i2, NULL);
+ return dsf_canonify(dsf, i1) == dsf_canonify(dsf, i2);
}
void dsf_merge(DSF *dsf, int v1, int v2)
{
- edsf_merge(dsf, v1, v2, false);
+ dsf_merge_flip(dsf, v1, v2, false);
}
int dsf_size(DSF *dsf, int index) {
return dsf->p[dsf_canonify(dsf, index)] >> 2;
}
-int edsf_canonify(DSF *dsf, int index, bool *inverse_return)
+int dsf_canonify_flip(DSF *dsf, int index, bool *inverse_return)
{
int start_index = index, canonical_index;
bool inverse = false;
@@ -107,17 +115,17 @@ int edsf_canonify(DSF *dsf, int index, bool *inverse_return)
return index;
}
-void edsf_merge(DSF *dsf, int v1, int v2, bool inverse)
+void dsf_merge_flip(DSF *dsf, int v1, int v2, bool inverse)
{
bool i1, i2;
assert(0 <= v1 && v1 < dsf->size && "Overrun in edsf_merge");
assert(0 <= v2 && v2 < dsf->size && "Overrun in edsf_merge");
- v1 = edsf_canonify(dsf, v1, &i1);
+ v1 = dsf_canonify_flip(dsf, v1, &i1);
assert(dsf->p[v1] & 2);
inverse ^= i1;
- v2 = edsf_canonify(dsf, v2, &i2);
+ v2 = dsf_canonify_flip(dsf, v2, &i2);
assert(dsf->p[v2] & 2);
inverse ^= i2;
@@ -147,7 +155,7 @@ void edsf_merge(DSF *dsf, int v1, int v2, bool inverse)
dsf->p[v2] = (v1 << 2) | inverse;
}
- v2 = edsf_canonify(dsf, v2, &i2);
+ v2 = dsf_canonify_flip(dsf, v2, &i2);
assert(v2 == v1);
assert(i2 == inverse);
}