36 template <
class IT,
class NT>
38 :m(nRow), n(nCol), nnz(size)
42 tuples =
new std::tuple<IT, IT, NT>[nnz];
48 isOperatorNew =
false;
51 template <
class IT,
class NT>
53 :
tuples(mytuples), m(nRow), n(nCol), nnz(size), isOperatorNew(isOpNew)
69 template <
class IT,
class NT>
74 tuples =
new std::tuple<IT, IT, NT>[maxnnz];
82 std::vector<IT>().swap(edges);
109 std::tuple<IT, IT, NT> * ntuples =
new std::tuple<IT,IT,NT>[nnz];
111 for(
int64_t i=0; i<maxnnz; ++i)
122 isOperatorNew =
false;
131 template <
class IT,
class NT>
133 :m(nRow), n(nCol), nnz(size)
135 isOperatorNew =
false;
138 tuples =
new std::tuple<IT, IT, NT>[nnz];
142 colindex(i) = multstack[i].key.first;
143 rowindex(i) = multstack[i].key.second;
150 template <
class IT,
class NT>
156 ::operator
delete(
tuples);
167 template <
class IT,
class NT>
170 tuples =
new std::tuple<IT, IT, NT>[nnz];
171 isOperatorNew =
false;
172 for(IT i=0; i< nnz; ++i)
179 template <
class IT,
class NT>
184 FillTuples(rhs.
dcsc);
186 isOperatorNew =
false;
189 template <
class IT,
class NT>
192 tuples =
new std::tuple<IT, IT, NT>[nnz];
194 for(IT i = 0; i< mydcsc->
nzc; ++i)
196 for(IT j = mydcsc->
cp[i]; j< mydcsc->cp[i+1]; ++j)
209 template <
class IT,
class NT>
218 ::operator
delete(
tuples);
225 isOperatorNew =
false;
229 tuples =
new std::tuple<IT, IT, NT>[nnz];
230 for(IT i=0; i< nnz; ++i)
242 template <
class IT,
class NT>
243 template <
typename BINFUNC>
248 std::vector< std::tuple<IT, IT, NT> > summed;
249 summed.push_back(
tuples[0]);
251 for(IT i=1; i< nnz; ++i)
253 if((joker::get<0>(summed.back()) == joker::get<0>(
tuples[i])) && (joker::get<1>(summed.back()) == joker::get<1>(
tuples[i])))
255 joker::get<2>(summed.back()) = BinOp(joker::get<2>(summed.back()), joker::get<2>(
tuples[i]));
259 summed.push_back(
tuples[i]);
264 ::operator
delete(
tuples);
267 tuples =
new std::tuple<IT, IT, NT>[summed.size()];
268 isOperatorNew =
false;
269 std::copy(summed.begin(), summed.end(),
tuples);
277 template <
class IT,
class NT>
280 std::cout <<
"Getting... SpTuples" << std::endl;
282 if (infile.is_open())
284 while ( (!infile.eof()) && cnz < nnz)
293 std::cerr <<
"supplied matrix indices are beyond specified boundaries, aborting..." << std::endl;
301 std::cerr <<
"input file is not open!" << std::endl;
308 template <
class IT,
class NT>
311 outfile << m <<
"\t"<< n <<
"\t"<< nnz<<std::endl;
312 for (IT i = 0; i < nnz; ++i)
320 template <
class IT,
class NT>
323 std::cout <<
"This is a SpTuples class" << std::endl;
325 std::cout <<
"m: " << m ;
326 std::cout <<
", n: " << n ;
327 std::cout <<
", nnz: "<< nnz << std::endl;
329 for(IT i=0; i< nnz; ++i)
333 std::cout <<
"Negative index at " << i << std::endl;
338 std::cout <<
"Index " << i <<
" too big with values (" <<
rowindex(i) <<
","<<
colindex(i) <<
")" << std::endl;
344 NT **
A = SpHelper::allocate2D<NT>(m,n);
345 for(IT i=0; i< m; ++i)
346 for(IT j=0; j<n; ++j)
349 for(IT i=0; i< nnz; ++i)
353 for(IT i=0; i< m; ++i)
355 for(IT j=0; j<n; ++j)
357 std::cout << std::setiosflags(std::ios::fixed) << std::setprecision(2) << A[i][j];
360 std::cout << std::endl;
std::tuple< IT, IT, NT > * tuples
IT * ir
row indices, size nz
void RemoveDuplicates(BINFUNC BinOp)
IT * cp
The master array, size nzc+1 (keeps column pointers)
NT * numx
generic values, size nz
IT nzc
number of columns with at least one non-zero in them
std::ofstream & putstream(std::ofstream &outfile) const
IT * jc
col indices, size nzc
std::ifstream & getstream(std::ifstream &infile)
static void deallocate2D(T **array, I m)
SpTuples< IT, NT > & operator=(const SpTuples< IT, NT > &rhs)