Is there anything I can do with these?
func u64 set_neighbors(u64 x) { return x | ((x << 1) | (x >> 1)); }
func u64 keep_gaps(u64 x) { return ~x & ((x << 1) & (x >> 1)); }
func u64 fill_gaps(u64 x) { return x | ((x << 1) & (x >> 1)); }
func u64 remove_loners(u64 x) { return x & ((x << 1) | (x >> 1)); }
func u64 keep_loners(u64 x) { return x & (~(x << 1) & ~(x >> 1)); }
func u64 remove_edges(u64 x) { return x & ((x << 1) & (x >> 1)); }
func u64 keep_edges(u64 x) { return x & (~(x << 1) | ~(x >> 1)); }
func u64 keep_left_edges(u64 x) { return x & ~(x >> 1); }
func u64 keep_right_edges(u64 x) { return x & ~(x << 1); }
func u64 keep_edges_remove_loners(u64 x) { return x & ((x << 1) ^ (x >> 1)); }
func u64 remove_first_run(u64 x) { return x & (x + (x & -x)); }
func u64 remove_run_at(u64 x, u32 n) { return x & (x + (1 << n)); }
func u64 set_run_transitions(u64 x) { return (x << 1) ^ (x >> 1); }
func u64 set_1_transitions(u64 x) { return x & ~(x << 1); }
func u64 set_0_transitions(u64 x) { return ~x & (x << 1); }
func u64 majority3(u64 x) { return (x & (x << 1)) | (x & (x >> 1)) | ((x << 1) & (x >> 1)); }
func u64 equal_neighbors(u64 x) { return ~((x << 1) ^ (x >> 1)); }
func bool is_zeroes_then_ones(u64 x) { return -x == (-x & x); }
func bool is_compact(u64 x) { return (x & x + (x & -x)) == 0; }