static void analyze_board(blockColor gameBoard[8][8], int &aX, int &aY, int &bX, int &bY) { int x, y, maxChain = 0, totalCount = 0; /*! @note this is structured such that lower 'y' are given preference! */ /*! iterate through each row */ for(y=0;y<8;y++) { /*! iterate through each column */ for(x=0;x<8;x++) { /*! handle horizontal swaps */ if(x < 7) { analyze_move(gameBoard, x, y, x+1, y, aX, aY, bX, bY, maxChain, totalCount); } /*! handle vertical swaps */ if(y < 7) { analyze_move(gameBoard, x, y, x, y+1, aX, aY, bX, bY, maxChain, totalCount); } } } return; }
void Iterator::analyze_insn(cfg::InstructionIterator it, Environment* env) const { auto op = it->insn->opcode(); switch (op) { case OPCODE_MOVE: case OPCODE_MOVE_WIDE: case OPCODE_MOVE_OBJECT: analyze_move(it, env); break; case OPCODE_MOVE_RESULT: case OPCODE_MOVE_RESULT_WIDE: case OPCODE_MOVE_RESULT_OBJECT: case IOPCODE_MOVE_RESULT_PSEUDO: case IOPCODE_MOVE_RESULT_PSEUDO_OBJECT: case IOPCODE_MOVE_RESULT_PSEUDO_WIDE: analyze_move_result(it, env); break; case OPCODE_PACKED_SWITCH: case OPCODE_SPARSE_SWITCH: case OPCODE_IF_EQ: case OPCODE_IF_NE: case OPCODE_IF_LT: case OPCODE_IF_GE: case OPCODE_IF_GT: case OPCODE_IF_LE: case OPCODE_IF_EQZ: case OPCODE_IF_NEZ: case OPCODE_IF_LTZ: case OPCODE_IF_GEZ: case OPCODE_IF_GTZ: case OPCODE_IF_LEZ: analyze_branch(it, env); break; case OPCODE_AGET: case OPCODE_AGET_WIDE: case OPCODE_AGET_OBJECT: case OPCODE_AGET_BOOLEAN: case OPCODE_AGET_BYTE: case OPCODE_AGET_CHAR: case OPCODE_AGET_SHORT: analyze_aget(it, env); break; case OPCODE_SGET: case OPCODE_SGET_WIDE: case OPCODE_SGET_OBJECT: case OPCODE_SGET_BOOLEAN: case OPCODE_SGET_BYTE: case OPCODE_SGET_CHAR: case OPCODE_SGET_SHORT: analyze_sget(it, env); break; case OPCODE_INVOKE_VIRTUAL: case OPCODE_INVOKE_SUPER: case OPCODE_INVOKE_DIRECT: case OPCODE_INVOKE_STATIC: case OPCODE_INVOKE_INTERFACE: analyze_invoke(it, env); break; default: analyze_default(it, env); break; } }