// 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
// ### simple-bit-vector-p object => generalized-boolean Value CL_simple_bit_vector_p(Value object) { return simple_bit_vector_p(object) ? T : NIL; }