Пример #1
0
int colIsValid(int **board, int col, int size){
  int i;
  int colary[size];
  for(i=0; i<size; i++){
	colary[i] = board[i][col];
  }
  return rowIsValid(colary, size);
}
Пример #2
0
XLL_DEC OPER *ohRemoveInvalidRows(OPER *xInputRange) {

    // initialize Function Call object
    boost::shared_ptr<reposit::FunctionCall> functionCall;

    reposit::Xloper xMulti;
    static OPER xRet;
    xRet.val.array.lparray = 0;

    try {
        functionCall = boost::shared_ptr<reposit::FunctionCall>
            (new reposit::FunctionCall("ohRemoveInvalidRows"));

        Excel(xlCoerce, &xMulti, 2, xInputRange, TempInt(xltypeMulti));

        int numValidRows = countValidRows2(xMulti());
        if (!numValidRows) return 0;
        int numCols = xMulti->val.array.columns;

        xRet.val.array.rows = numValidRows;
        xRet.val.array.columns = numCols;
        xRet.val.array.lparray = new OPER[numValidRows * numCols]; 
        xRet.xltype = xltypeMulti | xlbitDLLFree;

        int i2 = 0;
        for (int i=0; i<xMulti->val.array.rows; ++i) {
            if (rowIsValid(xMulti(), i)) {
                for (int j=0; j<numCols; ++j) {
                    int indexSource = i * numCols + j;
                    int indexTarget = i2 * numCols + j;
                    operToOper(&xRet.val.array.lparray[indexTarget], 
                        &xMulti->val.array.lparray[indexSource]);
                }
                i2++;
            }
        }

        return &xRet;

    } catch (const std::exception &e) {

        // free any memory that may have been allocated

        if (xRet.xltype & xltypeMulti && xRet.val.array.lparray) {
            for (int i=0; i<xRet.val.array.columns * xRet.val.array.rows; ++i) {
                if (xRet.val.array.lparray[i].xltype & xltypeStr && xRet.val.array.lparray[i].val.str)
                    delete [] xRet.val.array.lparray[i].val.str;
            }
            delete [] xRet.val.array.lparray;
        }

        // log the exception and return a null pointer (#NUM!) to Excel

        reposit::RepositoryXL::instance().logError(e.what(), functionCall);
        return 0;
    }
}
Пример #3
0
int boxIsValid(int **board, int r, int c){
  int rcorner = r - r%3;
  int ccorner = c - c%3;
  int i, j, count;
  int boxary[9];
  for(i=0, count=0; i<3; i++){
	for(j=0; j<3; j++, count++){
	  boxary[count] = board[rcorner+i][ccorner+j];
	}
  }
  return rowIsValid(boxary, 9);
}
Пример #4
0
int validAtSquare(int **board, square sq){
  int r = sq.r;
  int c = sq.c;
  return colIsValid(board, c, 9) && rowIsValid(board[r], 9) && boxIsValid(board, r, c);
}
Пример #5
0
int countValidRows2(const OPER &xMulti) {
    int ret = 0;
    for (int i=0; i<xMulti.val.array.rows; ++i)
        ret += rowIsValid(xMulti, i);
    return ret;
}