22 template <
class IU,
class NU>
25 template <
class IU,
class NU>
36 template <
class IT,
class NT>
42 SpTuples (
int64_t size, IT nRow, IT nCol, tuple<IT, IT, NT> * mytuples);
43 SpTuples (
int64_t maxnnz, IT nRow, IT nCol, vector<IT> & edges,
bool removeloops =
true);
51 IT &
rowindex (IT i) {
return joker::get<0>(tuples[i]); }
52 IT &
colindex (IT i) {
return joker::get<1>(tuples[i]); }
53 NT &
numvalue (IT i) {
return joker::get<2>(tuples[i]); }
55 IT
rowindex (IT i)
const {
return joker::get<0>(tuples[i]); }
56 IT
colindex (IT i)
const {
return joker::get<1>(tuples[i]); }
57 NT
numvalue (IT i)
const {
return joker::get<2>(tuples[i]); }
63 sort(tuples , tuples+nnz, rowlexicogcmp);
73 sort(tuples , tuples+nnz, collexicogcmp );
82 for(IT i=0; i< nnz; ++i)
84 if(joker::get<0>(tuples[i]) == joker::get<1>(tuples[i])) ++loop;
86 tuple<IT, IT, NT> * ntuples =
new tuple<IT,IT,NT>[nnz-loop];
89 for(IT i=0; i< nnz; ++i)
91 if(joker::get<0>(tuples[i]) != joker::get<1>(tuples[i]))
93 ntuples[ni++] = tuples[i];
102 pair<IT,IT> RowLimits()
107 tuple<IT,IT,NT> * maxit = max_element(tuples, tuples+nnz, rowcmp);
108 tuple<IT,IT,NT> * minit = min_element(tuples, tuples+nnz, rowcmp);
109 return make_pair(joker::get<0>(*minit), joker::get<0>(*maxit));
112 return make_pair(0,0);
114 pair<IT,IT> ColLimits()
119 tuple<IT,IT,NT> * maxit = max_element(tuples, tuples+nnz, colcmp);
120 tuple<IT,IT,NT> * minit = min_element(tuples, tuples+nnz, colcmp);
121 return make_pair(joker::get<1>(*minit), joker::get<1>(*maxit));
124 return make_pair(0,0);
126 tuple<IT, IT, NT>
front() {
return tuples[0]; };
127 tuple<IT, IT, NT>
back() {
return tuples[nnz-1]; };
130 template<
typename SR,
typename IU,
typename NU>
133 template<
typename SR,
typename IU,
typename NU>
136 ofstream& putstream (ofstream& outfile)
const;
137 ifstream& getstream (ifstream& infile);
139 bool isZero()
const {
return (nnz == 0); }
147 tuple<IT, IT, NT> * tuples;
163 template <
class IU,
class NU>