-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvtr_sparse.h
66 lines (57 loc) · 2.37 KB
/
vtr_sparse.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#ifndef VTR_SPARSE_H
#define VTR_SPARSE_H
#include "row.h"
/**
\brief Kompromis mezi vtr a row. Je to plny radek ve kterem je zapsano -1 dokud dokud na danem miste
neni zapsana hodnota.
*/
class VTR_SPARSE
{
friend class MTX;
friend class SPARSE;
public:
VTR_SPARSE();
VTR_SPARSE(const long& n);
//============================================================
//====================== PUBLIC METHODS ======================
//============================================================
void set_row(const ROW& r);
void get_next_ac(long& r);
long get_first_ac(){ ac = start; return ac; }
void initialize(const long& l);
void set_val_from_sparse(const double* v, const long* ind, const long& vn);
void add_val_from_sparse(const double* v, const long* ind, const long& vn, const double& m=1);
void print_full();
private:
//============================================================
//===================== PRIVATE VARIABLES ====================
//============================================================
long length;//delka radku
long value_number; //POCET NENULOVYCH HODNOT - Bude pouzivat i jako castecne ridky radek
double* values; //JEDNOTLIVE HODNOTY VEKTORU
long* index; //Indexy hodnot, ktere jsou vpravo od dane hodnoty
bool allocated; //Informuje o tom, jestli jsou pole alokovana
long ac;//Jaky je aktualni sloupec pri rozkladani
long start;//Ktery sloupec je prvni v radku//posledni je index[posledni]=-2;
//============================================================
//===================== PRIVATE METHODS ======================
//============================================================.
/// \brief Najde index pozice, kde je nejblizsi hodnota vlevo od i
long find_val_left(long i){
i--;
while(index[i] == -1)
i--;
return i;
}
/// \brief Najde index pozice, kde je nejblizsi hodnota vpravo od i
long find_val_right(long i){
i++;
while(index[i] == -1 && i < (length-1))
i++;
return i;
}
void anul_val();
void alloc();
void dealloc();
};
#endif // VTR_SPARSE_H