summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesper Jensen <jesper@jnsn.dev>2025-03-23 21:11:37 +0100
committerJesper Jensen <jesper@jnsn.dev>2025-03-23 21:11:37 +0100
commit8b86afb8a81ac1c143881ba1cc31b6926affdeda (patch)
treed0b2279cd76f3e34e6d09d11d84e16abe6b1ae3b
parent085906735bbadeb8e6cd47fc11610fe104080032 (diff)
Clean up some of the code
-rw-r--r--cmd/main.c33
-rw-r--r--src/leven.c27
-rw-r--r--src/leven.h17
-rw-r--r--test/contrained.c120
4 files changed, 97 insertions, 100 deletions
diff --git a/cmd/main.c b/cmd/main.c
index 62292f9..d143766 100644
--- a/cmd/main.c
+++ b/cmd/main.c
@@ -104,11 +104,6 @@ int main(int argc, char **argv) {
}
}
loge();
- /* mat_uint32_t cost = { */
- /* .data = malloc(a_tree.len * b_tree.len * sizeof(uint32_t)), */
- /* .stride = a_tree.len, */
- /* }; */
- /* assert(cost.data != NULL); */
mat_uint32_t cost_n = {
.data = malloc((a_tree.len+1) * (b_tree.len+1) * sizeof(uint32_t)),
@@ -128,40 +123,20 @@ int main(int argc, char **argv) {
};
assert(cost_s.data != NULL);
- constrained_tree_distance(a_tree, b_tree, cost, cost_n, cost_f, cost_s);
+ CTedData cted = {cost, cost_n, cost_f, cost_s};
+ constrained_tree_distance(a_tree, b_tree, cted);
- printf("COST_F\n");
- for(size_t y = 0; y < b_tree.len+1; y++) {
- for(size_t x = 0; x < cost.stride; x++) {
- printf("%d ", *imat_uint32_t(cost_f, x, y));
- }
- printf("\n");
- }
- printf("\n");
- printf("COST_N\n");
- for(size_t y = 0; y < b_tree.len+1; y++) {
- for(size_t x = 0; x < cost.stride; x++) {
- printf("%d ", *imat_uint32_t(cost_n, x, y));
- }
- printf("\n");
- }
- printf("\n");
-
- printf("%d\n", *imat_uint32_t(cost_n, 1, 1));
+ log("Final Cost %d", *imat_uint32_t(cost_n, 1, 1));
DECL_MAT(alignment, uint32_t, 2, 2);
uint32_t adj_alignment[2] = {0, 0};
constrained_tree_alignment(
a_tree,
b_tree,
- cost,
- cost_n,
- cost_f,
- cost_s,
+ cted,
adj_alignment,
alignment
);
- printf("Hello sailor\n");
return 0;
}
diff --git a/src/leven.c b/src/leven.c
index 14f1772..efd5247 100644
--- a/src/leven.c
+++ b/src/leven.c
@@ -85,11 +85,13 @@ void string_edit_alignment(const nid *a, size_t la, const nid *b, size_t lb, con
void constrained_tree_distance(
const struct Tree a,
const struct Tree b,
- const mat_uint32_t cost, // The cost matrix to map a node from a (x-axis) to a node from b (y-axis)
- mat_uint32_t cost_n, // The resulting computed cost matrixes node and forest. Size a.len x b.len
- mat_uint32_t cost_f,
- mat_uint32_t cost_s // Scratch space to calculate the edit distance between subtrees. Size a.adj.stride x b.adj.stride.
+ CTedData data
) {
+ mat_uint32_t cost = data.cost;
+ mat_uint32_t cost_n = data.cost_n;
+ mat_uint32_t cost_f = data.cost_f;
+ mat_uint32_t cost_s = data.cost_s;
+
*imat_uint32_t(cost_n, 0, 0) = 0;
*imat_uint32_t(cost_f, 0, 0) = 0;
@@ -121,7 +123,6 @@ void constrained_tree_distance(
string_edit_distance(imat_nid(a.adj, 0, i-1), a_adj_len, imat_nid(b.adj, 0, j-1), b_adj_len, cost_n, cost_s);
uint32_t min_cost = *imat_uint32_t(cost_s, a_adj_len, b_adj_len);
- log("min_cost = %d", min_cost);
if(a_adj_len > 0) {
uint32_t temp_min = UINT32_MAX;
@@ -132,7 +133,6 @@ void constrained_tree_distance(
}
min_cost = min(min_cost, *imat_uint32_t(cost_f, i, 0) + temp_min);
}
- log("min_cost = %d", min_cost);
if(b_adj_len > 0) {
uint32_t temp_min = UINT32_MAX;
@@ -143,12 +143,10 @@ void constrained_tree_distance(
}
min_cost = min(min_cost, *imat_uint32_t(cost_f, 0, j) + temp_min);
}
- log("min_cost = %d %d %d", min_cost, a_adj_len, b_adj_len);
*imat_uint32_t(cost_f, i, j) = min_cost;
min_cost = *imat_uint32_t(cost_f, i, j) + *imat_uint32_t(cost, i, j);
- log("min_cost = %d", min_cost);
if(a_adj_len > 0) {
uint32_t temp_min = UINT32_MAX;
@@ -159,7 +157,6 @@ void constrained_tree_distance(
}
min_cost = min(min_cost, *imat_uint32_t(cost_n, i, 0) + temp_min);
}
- log("min_cost = %d", min_cost);
if(b_adj_len > 0) {
uint32_t temp_min = UINT32_MAX;
@@ -170,7 +167,6 @@ void constrained_tree_distance(
}
min_cost = min(min_cost, *imat_uint32_t(cost_n, 0, j) + temp_min);
}
- log("min_cost = %d", min_cost);
*imat_uint32_t(cost_n, i, j) = min_cost;
}
@@ -182,16 +178,17 @@ void constrained_tree_distance(
void constrained_tree_alignment (
const struct Tree a,
const struct Tree b,
- const mat_uint32_t cost,
- const mat_uint32_t cost_n, // The resulting computed cost matrixes node and forest. Size a.len x b.len
- const mat_uint32_t cost_f,
- // Scratch space
- mat_uint32_t cost_s,
+ CTedData data,
uint32_t *adj_alignment,
mat_uint32_t alignment
) {
+ mat_uint32_t cost = data.cost;
+ mat_uint32_t cost_n = data.cost_n;
+ mat_uint32_t cost_f = data.cost_f;
+ mat_uint32_t cost_s = data.cost_s;
+
mat_uint32_t to_compute = {
.data = malloc((2 * (a.len * b.len)) * sizeof(uint32_t)),
.stride = 2
diff --git a/src/leven.h b/src/leven.h
index 318eaab..8f6fcf4 100644
--- a/src/leven.h
+++ b/src/leven.h
@@ -36,22 +36,23 @@ struct Tree {
size_t len;
};
+typedef struct {
+ const mat_uint32_t cost;
+ mat_uint32_t cost_n;
+ mat_uint32_t cost_f;
+ mat_uint32_t cost_s;
+} CTedData;
+
void constrained_tree_distance(
struct Tree a,
struct Tree b,
- mat_uint32_t cost,
- mat_uint32_t cost_n,
- mat_uint32_t cost_f,
- mat_uint32_t cost_s
+ CTedData data
);
void constrained_tree_alignment(
const struct Tree a,
const struct Tree b,
- const mat_uint32_t cost,
- const mat_uint32_t cost_n,
- const mat_uint32_t cost_f,
- mat_uint32_t cost_s,
+ CTedData data,
uint32_t *adj_alignment,
mat_uint32_t alignment
);
diff --git a/test/contrained.c b/test/contrained.c
index 37fae1d..c7e2c03 100644
--- a/test/contrained.c
+++ b/test/contrained.c
@@ -34,10 +34,12 @@ int main(int argc, char **argv) {
constrained_tree_distance(
a,
b,
- cost,
- cost_n,
- cost_f,
- cost_s
+ (CTedData) {
+ cost,
+ cost_n,
+ cost_f,
+ cost_s,
+ }
);
if(*imat_uint32_t(cost_n, 1, 1) != 1) {
@@ -50,10 +52,12 @@ int main(int argc, char **argv) {
constrained_tree_alignment(
a,
b,
- cost,
- cost_n,
- cost_f,
- cost_s,
+ (CTedData) {
+ cost,
+ cost_n,
+ cost_f,
+ cost_s,
+ },
adj_alignment,
alignment
);
@@ -87,10 +91,12 @@ int main(int argc, char **argv) {
constrained_tree_distance(
a,
b,
- cost,
- cost_n,
- cost_f,
- cost_s
+ (CTedData) {
+ cost,
+ cost_n,
+ cost_f,
+ cost_s,
+ }
);
if(*imat_uint32_t(cost_n, 1, 1) != 2) {
@@ -103,10 +109,12 @@ int main(int argc, char **argv) {
constrained_tree_alignment(
a,
b,
- cost,
- cost_n,
- cost_f,
- cost_s,
+ (CTedData) {
+ cost,
+ cost_n,
+ cost_f,
+ cost_s,
+ },
adj_alignment,
alignment
);
@@ -141,10 +149,12 @@ int main(int argc, char **argv) {
constrained_tree_distance(
a,
b,
- cost,
- cost_n,
- cost_f,
- cost_s
+ (CTedData) {
+ cost,
+ cost_n,
+ cost_f,
+ cost_s,
+ }
);
if(*imat_uint32_t(cost_n, 1, 1) != 0) {
@@ -157,10 +167,12 @@ int main(int argc, char **argv) {
constrained_tree_alignment(
a,
b,
- cost,
- cost_n,
- cost_f,
- cost_s,
+ (CTedData) {
+ cost,
+ cost_n,
+ cost_f,
+ cost_s,
+ },
adj_alignment,
alignment
);
@@ -197,10 +209,12 @@ int main(int argc, char **argv) {
constrained_tree_distance(
a,
b,
- cost,
- cost_n,
- cost_f,
- cost_s
+ (CTedData) {
+ cost,
+ cost_n,
+ cost_f,
+ cost_s,
+ }
);
if(*imat_uint32_t(cost_n, 1, 1) != 2) {
@@ -213,10 +227,12 @@ int main(int argc, char **argv) {
constrained_tree_alignment(
a,
b,
- cost,
- cost_n,
- cost_f,
- cost_s,
+ (CTedData) {
+ cost,
+ cost_n,
+ cost_f,
+ cost_s,
+ },
adj_alignment,
alignment
);
@@ -252,10 +268,12 @@ int main(int argc, char **argv) {
constrained_tree_distance(
a,
b,
- cost,
- cost_n,
- cost_f,
- cost_s
+ (CTedData) {
+ cost,
+ cost_n,
+ cost_f,
+ cost_s,
+ }
);
if(*imat_uint32_t(cost_n, 1, 1) != 4) {
@@ -268,10 +286,12 @@ int main(int argc, char **argv) {
constrained_tree_alignment(
a,
b,
- cost,
- cost_n,
- cost_f,
- cost_s,
+ (CTedData) {
+ cost,
+ cost_n,
+ cost_f,
+ cost_s,
+ },
adj_alignment,
alignment
);
@@ -307,10 +327,12 @@ int main(int argc, char **argv) {
constrained_tree_distance(
a,
b,
- cost,
- cost_n,
- cost_f,
- cost_s
+ (CTedData) {
+ cost,
+ cost_n,
+ cost_f,
+ cost_s,
+ }
);
if(*imat_uint32_t(cost_n, 1, 1) != 2) {
@@ -323,10 +345,12 @@ int main(int argc, char **argv) {
constrained_tree_alignment(
a,
b,
- cost,
- cost_n,
- cost_f,
- cost_s,
+ (CTedData) {
+ cost,
+ cost_n,
+ cost_f,
+ cost_s,
+ },
adj_alignment,
alignment
);