summaryrefslogtreecommitdiff
path: root/src
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 /src
parent085906735bbadeb8e6cd47fc11610fe104080032 (diff)
Clean up some of the code
Diffstat (limited to 'src')
-rw-r--r--src/leven.c27
-rw-r--r--src/leven.h17
2 files changed, 21 insertions, 23 deletions
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
);