#apply
#include "../_include.txt"

/*
@param
ビット変数の位置
選択肢の数
@return
選択番号(-1:選択不能)
*/
cev[CEV_SELECT_USING_BIT] .name(">>>>ビットフラグを使って選択する") {
    defv {
        r_pos = TV_RETURN

        a_pos = TV_SELECT_USING_BIT
        a_size
        
        idx
        num
    }

    def {
        BIT_SIZE = 32
    }

    num = 0
    @loop a_size .dst(idx) {
        @if `v[a_pos + idx / BIT_SIZE] & (1 << (idx % BIT_SIZE)) bl {
        } .else bl {
            num += 1
        }
    }

    //空いている場所を選び、ビットフラグを立てる
    r_pos = -1
    @if num > 0 bl {
        @loop a_size .dst(idx) {
            @if `v[a_pos + idx / BIT_SIZE] & (1 << (idx % BIT_SIZE)) bl {
            } .else bl {
                @if `rnd(0, num - 1) == 0 bl {
                    r_pos = idx
                    v[a_pos + idx / BIT_SIZE] |= (1 << (idx % BIT_SIZE))
                    @break
                }
                num -= 1
            }
        }
    }
}