Esempio n. 1
0
  BASKER_INLINE
  void BaskerMatrix<Int,Entry,Exe_Space>::print()
  {
    std::cout << "\n Matrix Print: \n Label: " << label.c_str()
              << " sr: " << srow
              << " sc: " << scol
              << "\n ncol: " << ncol
              << " nnz: " << nnz
              << std::endl;

    std::cout << " col_ptr: ";
    for(Int i=0; i < ncol+1; i++)
      {
        std::cout << col_ptr(i) << " , ";
      }
    std::cout << "\n row_idx: ";
    for(Int i=0; i < nnz; i++)
      {
        std::cout << row_idx(i) << " , ";
      }
    std::cout << "\n val: ";
    for(Int i=0; i < nnz; i++)
      {
        std::cout << val(i) << " , ";
      }

    std::cout << "\n END PRINT " << std::endl;

  }//end print()
Esempio n. 2
0
  BASKER_INLINE
  int BaskerMatrix<Int,Entry,Exe_Space>::fill()
  {
    if(v_fill == BASKER_TRUE)
      return -1;

    for(Int i = 0; i < ncol+1; i++)
    {
      col_ptr(i) = 0;
    }

    for(Int i = 0; i < nnz; i++)
    {
      row_idx(i) = 0;
    }

    for(Int i = 0; i < nnz; i++)
    {
      val(i) = 0;
    }

    //#ifdef BASKER_INC_LVL
    if(inc_lvl_flg == BASKER_TRUE)
    {
      for(Int i = 0; i < nnz; i++)
      {
        inc_lvl(i) = 0;
      }
    }
    //#endif

    v_fill = BASKER_TRUE;
    return 0;
  }
  BASKER_INLINE
  void BaskerMatrix<Int,Entry,Exe_Space>::print()
  {
    printf("\n Matrix Print: \n Label: %s sr: %d sc: %d \n", 
	   label.c_str(), srow, scol);
    printf("ncol: %d nnz: %d \n", 
	   ncol, nnz);
    printf(" col_ptr: ");
    for(Int i=0; i < ncol+1; i++)
      {
        printf(" %d , ", col_ptr(i));
      }
    printf("\n row_idx: ");
    for(Int i=0; i < nnz; i++)
      {
        printf(" %d , ", row_idx(i));
      }
    printf("\n val: ");
    for(Int i=0; i < nnz; i++)
      {
        printf(" %e , " , val(i));
      }

    printf("\n END PRINT \n");

  }//end print()
Esempio n. 4
0
Sudoku::Sudoku(string p, bool v) {
    valid = v;
    if(valid) {
	if(p.size() != 81)
	    throw Error(Error::bad_parse);
	for(int i=0; i<81; i++) {
	    if(!isdigit(p[i]))
		throw Error(Error::bad_parse);
	    string row_idx(1, row[i/9]);
	    string col_idx(1, col[i%9]);
	    string idx = row_idx + col_idx;
	    puzzle[idx] = p[i] - '0';
	}
    }
}
Esempio n. 5
0
  BASKER_INLINE
  void BaskerMatrix<Int, Entry, Exe_Space>::init_vectors
  (
   Int _m, Int _n, Int _nnz
   )
  {
    nrow = _m;
    ncol = _n;
    nnz  = _nnz;
    mnnz = _nnz;
    
    if(ncol >= 0)
      {
	BASKER_ASSERT((ncol+1)>0, "matrix init_vector ncol");
	MALLOC_INT_1DARRAY(col_ptr,ncol+1);
      }
    if(nnz > 0)
      {
	BASKER_ASSERT(nnz > 0, "matrix init_vector nnz");
	MALLOC_INT_1DARRAY(row_idx,nnz);
	MALLOC_ENTRY_1DARRAY(val,nnz);
	#ifdef BASKER_INC_LVL
	MALLOC_INT_1DARRAY(inc_lvl, nnz);
	#endif

      }
    else if(nnz==0)
      {

	BASKER_ASSERT((nnz+1)>0, "nnz+1 init_vector ");
	MALLOC_INT_1DARRAY(row_idx, nnz+1);
	row_idx(0) = (Int) 0;
	MALLOC_ENTRY_1DARRAY(val, nnz+1);
	val(0) = (Entry) 0;
	#ifdef BASKER_INC_LVL
	MALLOC_INT_1DARRAY(inc_lvl, nnz+1);
	#endif

      }

  }//end init_vectors(Int, Int, Int)
Esempio n. 6
0
void Sudoku::print() {
    cout << "-------------------------" << endl;
    for(int i=0; i<9; i++) {
	cout << "| ";
	for(int j=0; j<9; j++) {
	    string row_idx(1, row[i]);
	    string col_idx(1, col[j]);
	    int val = puzzle[row_idx + col_idx];
	    if(val == 0) cout << ".";
	    else cout << val;
	    if(j!=8 && (j+1)%3==0)
		cout << " | ";
	    else
		cout << " ";
	}
	cout << "|" << endl;
	if(i!=8 && (i+1)%3==0)
	    cout << "--------+-------+--------" << endl;
    }
    cout << "-------------------------" << endl;
}
Esempio n. 7
0
  BASKER_INLINE
  void BaskerMatrix<Int,Entry,Exe_Space>::convert2D
  (
   BASKER_MATRIX &M,
   BASKER_BOOL   alloc,
   Int kid
  )
  {
    if(nnz == 0)
    {
      for(Int i = 0; i < ncol+1; i++)
      {
        col_ptr(i) = 0;
      }

      MALLOC_INT_1DARRAY(row_idx, 1);
      row_idx(0) = (Int) 0;
      MALLOC_ENTRY_1DARRAY(val, 1);
      val(0) = (Entry) 0;
      return;
    }

    //info();
    //We could check some flag ??
    //We assume a pre-scan has already happened
    if(alloc == BASKER_TRUE)
    {
      //printf("ALLOC\n");
      if(nnz > 0)
      {
        BASKER_ASSERT(nnz > 0, "matrix row nnz 2");
        MALLOC_INT_1DARRAY(row_idx, nnz);
      }
      else if(nnz ==0)
      {
        BASKER_ASSERT((nnz+1)>0, "matrix row nnz 3");
        MALLOC_INT_1DARRAY(row_idx, nnz+1);
      }
    }
    //init_value(row_idx, nnz, (Int) 0);
    //printf("clear row: %d \n", nnz);
    for(Int i = 0; i < nnz; ++i)
    {
      //printf("clear row_idx(%d) \n", i);
      row_idx(i) = 0;
    }

    if(alloc == BASKER_TRUE)
    {
      if(nnz > 0)
      {
        BASKER_ASSERT(nnz > 0, "matrix nnz 4");
        MALLOC_ENTRY_1DARRAY(val, nnz);
      }
      else if(nnz == 0)
      {
        BASKER_ASSERT((nnz+1) > 0, "matrix nnz 5");
        MALLOC_ENTRY_1DARRAY(val, nnz+1);
      }
    }
    //init_value(val, nnz, (Entry) 0);
    for(Int i = 0; i < nnz; ++i)
    {
      val(i) = 0;
    }

    Int temp_count = 0;

    for(Int k = scol; k < scol+ncol; ++k)
    {
      //note col_ptr[k-scol] contains the starting index
      if(col_ptr(k-scol) == BASKER_MAX_IDX)
      {
        col_ptr(k-scol) = temp_count;
        //printf("continue called, k: %d  \n", k);
        continue;
      }

      for(Int i = col_ptr(k-scol); i < M.col_ptr(k+1); i++)
      {
        Int j = M.row_idx(i);
        //printf("i: %d j:%d \n", i,j);
        if(j >= srow+nrow)
        {
          break;
        }
        //printf("writing row_dix: %d i: %d  val: %d nnz: %d srow: %d nrow: %d \n",
        //	   temp_count, i, j, nnz, 
        //	   srow, nrow);
        //BASKER_ASSERT(temp_count < nnz, "2DConvert, too many values");

        //row_idx[temp_count] = j;

        if(j-srow <0)
        {
          std::cout << "kid: " << kid 
                    << " j: " << j 
                    << " srow: " << srow 
                    << " k: " << k
                    << " idx: " << i
                    << std::endl;
          BASKER_ASSERT(0==1, "j-srow NO");
        }


        row_idx(temp_count) = j-srow;
        val(temp_count) = M.val(i);
        temp_count++;
      }
      col_ptr(k-scol) = temp_count;
    }

    //col_ptr[0] = 0;

    //NO!!1
    //Slide over the col counts
    for(Int i = ncol; i > 0; i--)
    {
      col_ptr(i) = col_ptr(i-1);
    }
    col_ptr(0) = (Int) 0;

    //info();
    //print();

  }//end convert2d(Matrix)