示例#1
0
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;
}
示例#2
0
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;
  }
}