26 bool empty()
const {
return total_size == 0; }
27 size_t size()
const {
return total_size; }
28 size_t inner_size()
const {
return data.size(); }
35 void push_back(
const T& value) {
40 data.push_back(value);
44 void emplace_back(T&& value) {
49 data.emplace_back(std::move(value));
55 while (!data.empty() && !data.front()) {
60 T& operator[](
size_t index) {
65 const std::int64_t local_index =
static_cast<std::int64_t
>(index) -
static_cast<std::int64_t
>(total_size - data.size());
66 if (local_index < 0 || local_index >=
static_cast<std::int64_t
>(data.size())) {
67 std::cerr <<
"local_index: " << local_index <<
", data.size(): " << data.size() <<
", total_size: " << total_size << std::endl;
68 throw std::out_of_range(
"IndexedSlidingWindow: index out of range");
70 return data[local_index];
73 const T& operator[](
size_t index)
const {
74 const std::int64_t local_index =
static_cast<std::int64_t
>(index) -
static_cast<std::int64_t
>(total_size - data.size());
75 if (local_index < 0 || local_index >=
static_cast<std::int64_t
>(data.size())) {
76 std::cerr <<
"local_index: " << local_index <<
", data.size(): " << data.size() <<
", total_size: " << total_size << std::endl;
77 throw std::out_of_range(
"IndexedSlidingWindow: index out of range");
79 return data[local_index];
82 typename std::deque<T>::iterator inner_begin() {
return data.begin(); }
83 typename std::deque<T>::iterator inner_end() {
return data.end(); }
84 typename std::deque<T>::const_iterator inner_begin()
const {
return data.begin(); }
85 typename std::deque<T>::const_iterator inner_end()
const {
return data.end(); }
87 T& inner_front() {
return data.front(); }
88 const T& inner_front()
const {
return data.front(); }
90 T& inner_back() {
return data.back(); }
91 const T& inner_back()
const {
return data.back(); }
93 T& back() {
return data.back(); }
94 const T& back()
const {
return data.back(); }