Exemplo n.º 1
0
// bit
Val bit(Val bitvec, Val index)
{
    if (simple_bit_vector_p(bitvec))
    {
        return sbit(bitvec, index);
    }
    else if (bit_vector_p(bitvec))
    {
        const Vector* pRunner =
            bitvec->Decode<Vector>();

        if (cmp_xx(index, pRunner->m_total_size) >= 0)
        {
            error(Qvector_index_error,
                Kvector, bitvec,
                Kdatum, index );
        }

        for (;;)
        {
            index = add_xx(index, pRunner->m_offset);
            Val datavec = pRunner->m_displaced_to;
            if (simple_bit_vector_p(datavec))
            {
                return sbit(datavec, index);
            }

            if (! bit_vector_p(datavec))
            {
                error(make_type_error(bitvec, Qbit_vector));
            }

            pRunner = datavec->Decode<BitVector>();
        } // for
    } // if

    error(make_type_error(bitvec, Qbit_vector));
} // bit
Exemplo n.º 2
0
// ### simple-bit-vector-p object => generalized-boolean
Value CL_simple_bit_vector_p(Value object)
{
    return simple_bit_vector_p(object) ? T : NIL;
}