From 966b39b19e31dfe232d74da21c76f2981eae2201 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 9 Mar 2014 10:44:12 +0000 Subject: [PATCH] provide and use FOR_BITS this seemed like it would make it faster but doesn't appear to have done so --- main.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/main.c b/main.c index d8ae901..e8915f7 100644 --- a/main.c +++ b/main.c @@ -91,6 +91,8 @@ typedef uint32_t AdjWord; #define PRADJ "08"PRIx32 +#define FOR_BITS(j,m) for (j=0, j##bit=1; j < (m); j++, j##bit<<=1) + static int n, m, maxhamweight; static AdjWord *adjmatrix; static AdjWord adjall; @@ -356,14 +358,17 @@ static void prep(void) { n_over_best = INT_MAX; } +#if 0 static AdjWord one_adj_bit(int bitnum) { return (AdjWord)1 << bitnum; } +#endif static int count_set_adj_bits(AdjWord w) { - int j, total; - for (j=0, total=0; j= n) { printcounter++; optimise(!(printcounter & 0xfff)); @@ -615,8 +624,8 @@ static void iterate_recurse(int i, AdjWord min) { if (i == 0 && (adjmatrix[i] & (1+adjmatrix[i]))) goto again; - for (int j = 0; j < m; j++) - if (adjmatrix[i] & one_adj_bit(j)) + FOR_BITS(j,m) + if (adjmatrix[i] & jbit) weight[j]++; for (int j = 0; j < m; j++) if (weight[j] >= n_over_best) @@ -625,8 +634,8 @@ static void iterate_recurse(int i, AdjWord min) { iterate_recurse(i+1, adjmatrix[i]); takeout: - for (int j = 0; j < m; j++) - if (adjmatrix[i] & one_adj_bit(j)) + FOR_BITS(j,m) + if (adjmatrix[i] & jbit) weight[j]--; again: -- 2.30.2