assert(ps < 256);  unsigned char* first(&clusterPage(0)); unsigned char* gap(GapFinder<CLUSTER>(first, ps, NUMPAGES)); assert(gap); assert(gap - first < NUMPAGES); GapFiller(gap, ps); return &ClusteredWorld::self().pages[gap - first];
unsigned i(FindUnsetBits<1>(*used)); if (i < sizeof *used * 8) { *used |= (1 << i); return reinterpret_cast<Node0*>(this + 1) + i; }
    static void* allocate(size_t ps = std::min(1 << CLUSTER, 255))    {        assert(ps < 256);        // TODO ### grab semaphore        unsigned char* first(&clusterPage(0));        unsigned char* gap(GapFinder<CLUSTER>(first, ps, NUMPAGES));        assert(gap); // for now ###        assert(gap - first < NUMPAGES);        GapFiller(gap, ps);        return &ClusteredWorld::self().pages[gap - first];    }