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>
167template <
class IT,
class NT>
170 tuples =
new std::tuple<IT, IT, NT>[nnz];
171 isOperatorNew =
false;
172 for(
IT i=0; i< nnz; ++i)
179template <
class IT,
class NT>
184 FillTuples(
rhs.dcsc);
186 isOperatorNew =
false;
189template <
class IT,
class NT>
192 tuples =
new std::tuple<IT, IT, NT>[nnz];
198 colindex(k) =
mydcsc->jc[i];
200 numvalue(k++) =
mydcsc->numx[
j];
209template <
class IT,
class NT>
225 isOperatorNew =
false;
229 tuples =
new std::tuple<IT, IT, NT>[nnz];
230 for(
IT i=0; i< nnz; ++i)
232 tuples[i] =
rhs.tuples[i];
242template <
class IT,
class NT>
243template <
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]);
267 tuples =
new std::tuple<IT, IT, NT>[
summed.size()];
268 isOperatorNew =
false;
277template <
class IT,
class NT>
280 std::cout <<
"Getting... SpTuples" << std::endl;
291 if((rowindex(
cnz) > m) || (colindex(
cnz) > n))
293 std::cerr <<
"supplied matrix indices are beyond specified boundaries, aborting..." << std::endl;
301 std::cerr <<
"input file is not open!" << std::endl;
308template <
class IT,
class NT>
311 outfile << m <<
"\t"<< n <<
"\t"<< nnz<<std::endl;
312 for (
IT i = 0; i < nnz; ++i)
314 outfile << rowindex(i)+1 <<
"\t"<< colindex(i)+1 <<
"\t"
315 << numvalue(i) << std::endl;
320template <
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)
331 if(rowindex(i) < 0 || colindex(i) < 0)
333 std::cout <<
"Negative index at " << i << std::endl;
336 else if(rowindex(i) >= m || colindex(i) >= n)
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)
351 A[rowindex(i)][colindex(i)] = numvalue(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;
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)