29static const int num_cols_per_hand = 2;
30static const std::array<col_type, num_col_types> ct_loop = { col_left,
33static const std::array<col_type, num_cols_per_hand> ct_loop_no_jumps = {
40determine_col_type(
const unsigned& notes,
const unsigned& hand_id) -> col_type
42 const unsigned shirt = notes & hand_id;
57 }
else if (hand_id == 12) {
75invert_col(
const col_type& col) -> col_type
77 assert(col == col_left || col == col_right);
78 return col == col_left ? col_right : col_left;
100determine_base_pattern_type(
const col_type& now,
const col_type& last)
103 if (last == col_init) {
104 return base_type_init;
107 const bool single_tap = now == col_left || now == col_right;
108 if (last == col_ohjump) {
110 return base_jump_single;
113 return base_jump_jump;
115 }
else if (!single_tap) {
116 return base_single_jump;
118 }
else if (now == col_left && last == col_right) {
119 return base_right_left;
120 }
else if (now == col_right && last == col_left) {
121 return base_left_right;
122 }
else if (now == last) {
124 return base_single_single;
129 return base_type_init;
136is_cc_tap(
const base_type& bt) ->
bool
138 return bt == base_left_right || bt == base_right_left;