/* See boag_booklet_index.h */ /* Last edited on 2018-02-12 03:07:26 by stolfilocal */ #define _GNU_SOURCE #include #include #include #include void boag_booklet_index_to_vector(int32_t NT, int32_t NB, int64_t NV, int64_t ix, int32_t qv[]) { demand((ix >= 0) && (ix < NV), "invalid booklet index"); for (uint32_t it = 0; it < NT; it++) { qv[it] = (int32_t)((ix % NB) + 1); ix = ix / NB; } assert(ix == 0); } void boag_booklet_index_from_vector(int32_t NT, int32_t NB, int64_t NV, int32_t qv[], int64_t *ixP) { int64_t ix = 0; for (int32_t it = NT-1; it >= 0; it--) { int32_t ib = qv[it]; demand((ib >= 1) && (ib <= NB), "invalid booklet vector"); ix = ix*NB + (ib - 1); } assert((ix >= 0) && (ix < NV)); (*ixP) = ix; }