55 checked_array() : disabled_(
false) {}
57 explicit checked_array(U v) : disabled_(
false) {
58 for (
auto &e : data)
new (&e) T(v);
61 checked_array(
const std::initializer_list<U> &v) : disabled_(
false) {
63 for (
auto &e : data) {
64 if (it == v.end())
break;
68 T &operator[](
size_t idx) {
70 LOG1(
"ERROR: array index " << idx <<
" out of bounds " <<
this);
71 BUG(
"array index %zu out of bounds (%zu)", idx, S);
75 const T &operator[](
size_t idx)
const {
77 LOG1(
"ERROR: array index " << idx <<
" out of bounds " <<
this);
78 BUG(
"array index %zu out of bounds (%zu)", idx, S);
82 size_t size()
const {
return S; }
83 T *begin() {
return data; }
84 T *end() {
return data + S; }
85 bool modified()
const {
86 for (
size_t i = 0; i < S; i++)
87 if (data[i].modified())
return true;
90 void set_modified(
bool v =
true) {
91 for (
size_t i = 0; i < S; i++) data[i].set_modified(v);
93 bool disabled()
const {
return disabled_; }
96 for (
size_t i = 0; i < S; i++)
97 if (!data[i].disable()) rv =
false;
98 if (rv) disabled_ =
true;
103 for (
size_t i = 0; i < S; i++) data[i].enable();
105 bool disable_if_unmodified() {
107 for (
size_t i = 0; i < S; i++)
108 if (!data[i].disable_if_unmodified()) rv =
false;
109 if (rv && !options.gen_json) {
116 bool disable_if_zero() {
118 for (
size_t i = 0; i < S; i++)
119 if (!data[i].disable_if_zero()) rv =
false;
120 if (rv && !options.gen_json) {
127 bool disable_if_reset_value() {
129 for (
size_t i = 0; i < S; i++)
130 if (!data[i].disable_if_reset_value()) rv =
false;
131 if (rv && !options.gen_json) {