146 unsigned lastlast_row = 0u;
147 unsigned last_row = 0u;
148 generic_base_type last_type = gbase_type_init;
156 int taps_bracketing = 0;
157 bool bracketing =
false;
163 taps_by_size.fill(0);
168 last_type = gbase_type_init;
176 taps_by_size.fill(0);
181 last_type = gbase_type_init;
184 void handle_row(
const unsigned& new_row,
const unsigned& hand_mask){
185 auto pattern_type = determine_generic_base_pattern_type(
186 new_row, last_row, hand_mask);
188 const auto taps_in_row = std::popcount(new_row);
189 total_taps += taps_in_row;
190 if (taps_in_row > 1) {
191 chord_taps += taps_in_row;
194 if (pattern_type >= num_gbase_types) {
195 lastlast_row = last_row;
201 if (basetype_stops_bracket(pattern_type)) {
206 else if (!basetype_stops_bracket(last_type)) {
207 if (is_bracket(new_row, last_row, lastlast_row)) {
209 taps_bracketing += taps_in_row;
212 taps_bracketing += taps_in_row + std::popcount(last_row) +
213 std::popcount(lastlast_row);
218 lastlast_row = last_row;
220 last_type = pattern_type;
221 _base_types[pattern_type]++;
222 taps_by_size[taps_in_row - 1] += taps_in_row;
225 int possible_brackets()
const
227 return _base_types[gbase_hard_trill] +
228 _base_types[gbase_single_chord_trill] +
229 _base_types[gbase_chord_chord_trill];
232 std::array<int, num_gbase_types> _base_types = { 0, 0, 0, 0, 0, 0, 0, 0 };
233 std::array<int, num_tap_size> taps_by_size = { 0, 0, 0, 0, 0, 0, 0, 0,
234 0, 0, 0, 0, 0, 0, 0, 0 };