15 using BitArrayDeque =
typename stool::NaiveBitVector<MAX_BIT_SIZE>;
22 using BitDequeContainerIterator =
typename BitArrayDeque::NaiveBitVectorIterator;
37 this->push_back(
_items[i]);
43 std::swap(this->bits,
item.bits);
47 return this->bits.
size();
53 uint64_t unused_size_in_bytes()
const
55 return this->bits.unused_size_in_bytes();
60 return this->bits.
at(
pos);
64 throw std::runtime_error(
"Error: BitDequeContainer");
71 static std::string name()
73 return "BitDequeContainer";
77 return this->bits.
psum(i);
81 return this->bits.
psum();
89 std::string to_string()
const
91 return this->bits.to_string();
93 std::vector<uint64_t> to_value_vector()
const
95 std::vector<uint64_t>
r;
96 for (
uint64_t i = 0; i < this->size(); i++)
114 return value >> (64 - size);
123 template <
typename VEC>
128 for (
uint64_t i = 0; i < this->size(); i++)
144 this->bits.erase(
pos);
146 uint64_t to_bit_array(
const std::vector<uint64_t> &
new_items, std::array<uint64_t, MAX_BIT_SIZE / 64> &
output){
158 void push_front(
const std::vector<uint64_t> &
new_items)
178 std::cout <<
sum1 <<
"/" <<
sum2 << std::endl;
179 std::cout << this->bits.
psum() << std::endl;
189 this->bits.push_back64(
new_item >= 1);
192 void push_back(
const std::vector<uint64_t> &
new_items)
204 this->bits.push_back(
value >= 1);
210 this->bits.pop_front();
218 std::vector<uint64_t>
r;
240 this->bits.pop_back();
247 std::vector<uint64_t>
r;
252 bool b = this->at(this->size() - 1);
253 r[
len - i - 1] =
b ? 1 : 0;
261 return this->bits.reverse_psum(i);
266 return this->bits.
psum(i, j);
276 return this->bits.rank1(i);
281 return i - this->rank1(i);
285 return b ? this->rank1(i) : this->rank0(i);
290 return b ? this->select1(i) : this->select0(i);
295 return this->bits.select1(i);
302 void to_data(std::vector<uint8_t> &
output)
const
310 BitArrayDeque::save(this->bits,
output, size);
318 static uint64_t get_byte_size(
const std::vector<BitDequeContainer> &items)
321 for (
const auto &
item : items)
323 size += BitArrayDeque::get_byte_size(
item.bits);
327 static void save(
const std::vector<BitDequeContainer> &items, std::vector<uint8_t> &
output,
uint64_t &
pos)
329 uint64_t size = get_byte_size(items);
339 for (
const auto &
item : items)
344 static void save(
const std::vector<BitDequeContainer> &items, std::ofstream &
os)
349 for (
const auto &
item : items)
351 BitArrayDeque::save(
item.bits,
os);
356 r.bits = BitArrayDeque::load(
data,
pos);
362 r.bits = BitArrayDeque::load(
ifs);
365 static std::vector<BitDequeContainer> load_vector(
const std::vector<uint8_t> &
data,
uint64_t &
pos)
371 std::vector<BitDequeContainer>
output;
379 static std::vector<BitDequeContainer> load_vector(std::ifstream &
ifs)
382 ifs.read(
reinterpret_cast<char *
>(&size),
sizeof(
uint64_t));
384 std::vector<BitDequeContainer>
output;
388 output[i] = BitDequeContainer::load(
ifs);
394 BitDequeContainerIterator begin()
const
396 return this->bits.begin();
398 BitDequeContainerIterator end()
const
400 return this->bits.end();