36template <
class IT,
class NT>
42 tuples =
new std::tuple<IT, IT, NT>[nnz];
48 isOperatorNew =
false;
51template <
class IT,
class NT>
69template <
class IT,
class NT>
82 std::vector<IT>().swap(edges);
109 std::tuple<IT, IT, NT> *
ntuples =
new std::tuple<IT,IT,NT>[nnz];
122 isOperatorNew =
false;
131template <
class IT,
class NT>
135 isOperatorNew =
false;
138 tuples =
new std::tuple<IT, IT, NT>[nnz];
150template <
class IT,
class NT>
154 if((nnz > 0) && (tuples_deleted !=
true))
168template <
class IT,
class NT>
171 tuples =
new std::tuple<IT, IT, NT>[nnz];
172 isOperatorNew =
false;
173 for(
IT i=0; i< nnz; ++i)
180template <
class IT,
class NT>
185 FillTuples(
rhs.dcsc);
187 isOperatorNew =
false;
192template <
class IT,
class NT>
196 isOperatorNew =
false;
199 tuples =
new std::tuple<IT, IT, NT>[nnz];
202 for (
IT i = 0; i < csc->n; ++i)
204 for (
IT j = csc->jc[i];
j < csc->jc[i + 1]; ++
j)
216template <
class IT,
class NT>
219 tuples =
new std::tuple<IT, IT, NT>[nnz];
225 colindex(k) =
mydcsc->jc[i];
227 numvalue(k++) =
mydcsc->numx[
j];
236template <
class IT,
class NT>
252 isOperatorNew =
false;
256 tuples =
new std::tuple<IT, IT, NT>[nnz];
257 for(
IT i=0; i< nnz; ++i)
259 tuples[i] =
rhs.tuples[i];
269template <
class IT,
class NT>
270template <
typename BINFUNC>
275 std::vector< std::tuple<IT, IT, NT> >
summed;
276 summed.push_back(tuples[0]);
278 for(
IT i=1; i< nnz; ++i)
280 if((joker::get<0>(
summed.back()) == joker::get<0>(tuples[i])) && (joker::get<1>(
summed.back()) == joker::get<1>(tuples[i])))
282 joker::get<2>(
summed.back()) =
BinOp(joker::get<2>(
summed.back()), joker::get<2>(tuples[i]));
286 summed.push_back(tuples[i]);
294 tuples =
new std::tuple<IT, IT, NT>[
summed.size()];
295 isOperatorNew =
false;
304template <
class IT,
class NT>
307 std::cout <<
"Getting... SpTuples" << std::endl;
318 if((rowindex(
cnz) > m) || (colindex(
cnz) > n))
320 std::cerr <<
"supplied matrix indices are beyond specified boundaries, aborting..." << std::endl;
328 std::cerr <<
"input file is not open!" << std::endl;
335template <
class IT,
class NT>
338 outfile << m <<
"\t"<< n <<
"\t"<< nnz<<std::endl;
339 for (
IT i = 0; i < nnz; ++i)
341 outfile << rowindex(i)+1 <<
"\t"<< colindex(i)+1 <<
"\t"
342 << numvalue(i) << std::endl;
347template <
class IT,
class NT>
350 std::cout <<
"This is a SpTuples class" << std::endl;
352 std::cout <<
"m: " << m ;
353 std::cout <<
", n: " << n ;
354 std::cout <<
", nnz: "<< nnz << std::endl;
356 for(
IT i=0; i< nnz; ++i)
358 if(rowindex(i) < 0 || colindex(i) < 0)
360 std::cout <<
"Negative index at " << i << std::endl;
363 else if(rowindex(i) >= m || colindex(i) >= n)
365 std::cout <<
"Index " << i <<
" too big with values (" << rowindex(i) <<
","<< colindex(i) <<
")" << std::endl;
371 NT **
A = SpHelper::allocate2D<NT>(m,n);
372 for(
IT i=0; i< m; ++i)
373 for(
IT j=0;
j<n; ++
j)
376 for(
IT i=0; i< nnz; ++i)
378 A[rowindex(i)][colindex(i)] = numvalue(i);
380 for(
IT i=0; i< m; ++i)
382 for(
IT j=0;
j<n; ++
j)
384 std::cout << std::setiosflags(std::ios::fixed) << std::setprecision(2) <<
A[i][
j];
387 std::cout << std::endl;
static void deallocate2D(T **array, I m)
std::tuple< IT, IT, NT > * tuples
SpTuples< IT, NT > & operator=(const SpTuples< IT, NT > &rhs)
std::ofstream & putstream(std::ofstream &outfile) const
std::ifstream & getstream(std::ifstream &infile)
void RemoveDuplicates(BINFUNC BinOp)