27#ifndef ETSI_ITS_MSGS_UTILS_IMPL_ASN1_PRIMITIVES_ASN1_PRIMITIVES_SETTERS_H
28#define ETSI_ITS_MSGS_UTILS_IMPL_ASN1_PRIMITIVES_ASN1_PRIMITIVES_SETTERS_H
43inline void setBitString(T& bitstring,
const std::vector<bool>& bits) {
46 const int bits_per_byte = 8;
47 const int n_bytes =
static_cast<int>((bits.size() - 1) / bits_per_byte) + 1;
48 const int n_bits = n_bytes * bits_per_byte;
51 bitstring.bits_unused = n_bits - bits.size();
52 bitstring.value = std::vector<uint8_t>(n_bytes);
55 for (
int byte_idx = 0; byte_idx < n_bytes; byte_idx++) {
58 for (
int bit_idx_in_byte = 0; bit_idx_in_byte < bits_per_byte; bit_idx_in_byte++) {
61 int bit_idx = bit_idx_in_byte + byte_idx * bits_per_byte;
62 if ((byte_idx + 1) >= n_bytes && (bit_idx_in_byte + bitstring.bits_unused) >= bits_per_byte)
break;
65 bitstring.value[byte_idx] |= bits[bit_idx] << (bits_per_byte - 1 - bit_idx_in_byte);