static int detail_button_Ev( const ev_t* ev, int n, char* dest ) { char buf[4092] = { '\0' }; // Describe the button press describe_button_Ev( ev, sizeof(buf), buf ); strcat( buf, " State { " ); // Write the rest of the button states bool multi = false; for( int i=0; i<n_buttonsets; i++ ) { struct buttonset_s* buttonset = &buttonsets[i]; for( int j=0; j<buttonset->N; j++ ) { int button = buttonset->base + j; if( bitset_isset( ev->button.state, button ) ) { // Button NN char desc[256]; sprintf(desc, "%s button %d", buttonset->prefix, j); if( multi ) strcat(buf, ", "); strcat( buf, desc ); multi = true; } } } strcat( buf, " }"); return maybe_strncpy( dest, n, buf ); }
static int describe_button_Ev( const ev_t* ev, int n, char* dest ) { const int which = ev->button.which; char buf[4092]; // Find the button set for( int i=0; i<n_buttonsets; i++ ) { struct buttonset_s* buttonset = &buttonsets[i]; if( which >= buttonset->base && which < buttonset->base + buttonset->N ) { // Describe the button press/release sprintf(buf, "%s %s button %d", bitset_isset( ev->button.state, which ) ? "Pressed" : "Released", buttonset->prefix, which - buttonset->base); break; } } return maybe_strncpy( dest, n, buf ); }
int main(int args, char **argv) { size_t bitset_size = 1 << (30 - 5); uint64_t max_prime = bitset_size << 5; fprintf(stderr, "Upper limit: %d\n", max_prime); bitset bits; bits.size = bitset_size; bits.elements = calloc(sizeof(unsigned int), bits.size); // Set all multiples of two to be non-primes and the rest // to be primes memset(bits.elements, 2 + 8 + 32 + 128, bits.size * sizeof(unsigned int)); bitset *primes = &bits; bitset_unset(primes, 1); bitset_set(primes, 2); uint64_t p = 3; while (p < max_prime) { // Filter out all multiples of p for (uint32_t i = p + p; i < max_prime; i += p) { bitset_unset(primes, i); } // Find next number to filter out do { p += 2; } while (p < max_prime && !bitset_isset(primes, p)); } // Write to file /* FILE *fp = fopen("test2.raw", "w"); for (p = 2; p < max_prime; p++) { if (bitset_isset(primes, p)) { writeVarint64(p, fp); } } fflush(fp); fclose(fp); fprintf(stderr, "wrote varints\n"); */ FILE *fp = fopen("primes.bin", "w"); fwrite(bits.elements, sizeof(unsigned int), bits.size, fp); fflush(fp); fclose(fp); fprintf(stderr, "Largest prime: %d\n", p - 2); fprintf(stderr, "Wrote bitset: primes.bin\n"); free(bits.elements); }
int Solve(int mask){ if(bitset_isset(seen, mask)) return dp[mask]; bitset_set(seen, mask); int bad = 0; for(int i = 0; i < 9; i++) if((neighbour[inside[i]] & mask) == neighbour[inside[i]]) bad |= 1 << inside[i]; if(!bad){ dp[mask] = 0; int sign = 1; for (int i = 0; i < 25; i++) if (mask & (1 << v[i])) { dp[mask] += sign * value[v[i]]; sign *= -1; } return dp[mask]; } int good = mask - bad, w[25], state[25], n = 0; for(int i = 0, j = 1; i < 25; i++, j *= 2) if(good & j){ int k = 0, now = neighbour[i] & bad; while (k < n && now != state[k]) k++; if (k == n) { w[n] = i; state[n] = now; n++; } else if (value[i] > value[w[k]]) w[k] = i; } dp[mask] = -INF; for(int i = 0; i < n; i++) dp[mask] = max(dp[mask], value[w[i]] - Solve(mask ^ (1 << w[i]))); return dp[mask]; }
static int memzone_get_flags(struct memzone *mz, os_index_t i) { return bitset_isset(mz->flags, 2 * i) | (bitset_isset(mz->flags, 2 * i + 1) << 1); }