From: Ian Jackson Date: Sun, 9 Mar 2014 10:44:12 +0000 (+0000) Subject: provide and use FOR_BITS X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=matchsticks-search.git;a=commitdiff_plain;h=966b39b19e31dfe232d74da21c76f2981eae2201 provide and use FOR_BITS this seemed like it would make it faster but doesn't appear to have done so --- 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: