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) {
45 const int bits_per_byte = 8;
46 const int n_bytes = (bits.size() - 1) / bits_per_byte + 1;
47 const int n_bits = n_bytes * bits_per_byte;
50 bitstring.bits_unused = n_bits - bits.size();
51 bitstring.value = std::vector<uint8_t>(n_bytes);
54 for (
int byte_idx = n_bytes - 1; byte_idx >= 0; byte_idx--) {
57 for (
int bit_idx_in_byte = bits_per_byte - 1; bit_idx_in_byte >= 0; bit_idx_in_byte--) {
60 int bit_idx = (n_bytes - byte_idx - 1) * bits_per_byte + bit_idx_in_byte;
61 if (byte_idx == 0 && bit_idx < bitstring.bits_unused)
break;
64 if (bit_idx < bits.size()) {
65 bitstring.value[byte_idx] |= bits[bits_per_byte - bit_idx - 1] << bit_idx_in_byte;