-
Notifications
You must be signed in to change notification settings - Fork 1
/
colorTable.hpp
152 lines (141 loc) · 4.32 KB
/
colorTable.hpp
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#ifndef COLORTABLE_H__
#define COLORTABLE_H__
#include <vector>
#include "sdsl/vectors.hpp"
#include <memory>
#include <parallel_hashmap/phmap.h>
using phmap::flat_hash_map;
using namespace std;
class colorTable{
public:
colorTable();
virtual ~colorTable();
static colorTable* load(string folderName);
virtual bool getSamples(uint64_t colorID,vector<uint32_t>& res)=0;
virtual bool setColor(uint64_t colorID,vector<uint32_t>& v)=0;
virtual void save(string folderName)=0;
uint64_t numSamples;
uint32_t numColors;
};
class colorTableInv{
public:
colorTableInv();
virtual ~colorTableInv();
virtual uint64_t getColorId(vector<uint32_t>& )=0;
virtual void setColorId(uint64_t colorID,vector<uint32_t>& v)=0;
};
class stringColorTableInv: public colorTableInv{
private:
unordered_map<string,uint64_t> table;
string getKey(vector<uint32_t>&);
public:
stringColorTableInv();
~stringColorTableInv();
uint64_t getColorId(vector<uint32_t>& );
void setColorId(uint64_t colorID,vector<uint32_t>& v);
};
// this class is copied and edited from mantis project
//https://github.com/splatlab/mantis
class BitVectorsTable: public colorTable{
public:
static const uint64_t NUM_BV_BUFFER=20000000;
BitVectorsTable(){}
BitVectorsTable(uint64_t numSamples);
BitVectorsTable(string folderName);
//BitVectorsTable(vector<string> fileNames,uint64_t numSamples);
virtual ~BitVectorsTable();
bool getSamples(uint64_t colorID,vector<uint32_t>& res)override;
bool setColor(uint64_t colorID,vector<uint32_t>& v)override;
void save(string folderName)override;
private:
std::vector<sdsl::rrr_vector<63> > eqclasses;
sdsl::bit_vector current;
uint64_t nCurrentColors;
};
class intVectorsTable: public colorTable{
public:
intVectorsTable(){}
intVectorsTable(string folderName);
//BitVectorsTable(vector<string> fileNames,uint64_t numSamples);
virtual ~intVectorsTable();
bool getSamples(uint64_t colorID,vector<uint32_t>& res)override;
bool setColor(uint64_t colorID,vector<uint32_t>& v)override;
void save(string folderName)override;
private:
flat_hash_map<uint64_t, std::vector<uint32_t> > colors;
};
// class samplesCombination{
// public:
// samplesCombination(){}
// ~samplesCombination(){}
// bool serialize(ofstream& out);
// //virtual bool deserialize(ifstream& input)=0;
// bool getSamples(uint32_t numSamples,vector<uint32_t>& res);
// uint64_t sizeInBytes();
// static unique_ptr<samplesCombination> load(ifstream& input);
// };
// class sdslEncVector: samplesCombination{
// public:
// sdslEncVector(vector<uint32_t> samples){};
// ~sdslEncVector(){};
// bool serialize(ofstream& out);
// bool deserialize(ifstream& out);
// bool getSamples(uint32_t numSamples,vector<uint32_t>& res);
// uint64_t sizeInBytes();
// private:
// sdsl:enc_vector<> data;
// }
// class sdslRRRBitVector: samplesCombination{
// public:
// sdslRRRBitVector(vector<uint32_t> samples,uint32_t numSamples);
// ~sdslRRRBitVector();
// bool serialize(ofstream& out);
// bool deserialize(ifstream& out);
// bool getSamples(uint32_t numSamples,vector<uint32_t>& res);
// uint64_t sizeInBytes();
// private:
// sdsl::rrr_vector<63> rrr_bits;
// }
//
// class pointer: public samplesCombination{
// public:
// pointer(uint32_t value): value(value){};
// pointer(ifstream& out);
// ~pointer(){};
// bool serialize(ofstream& out);
// bool getSamples(uint32_t numSamples,vector<uint32_t>& res);
// uint64_t sizeInBytes();
// uint32_t value;
//
// };
// template<int size=8>
// class samplesList: samplesCombination{
// public:
// samplesList(vector<uint32_t> samples);
// ~samplesList();
// bool serialize(ofstream& out);
// bool deserialize(ifstream& out);
// bool getSamples(uint32_t numSamples,vector<uint32_t>& res);
// uint64_t sizeInBytes();
// private:
// uint8_t data[size];
// }
//
// class HybridTable: public colorTable{
// public:
// HybridTable(uint64_t numSamples,uint64_t numColors);
// HybridTable(string folderName);
// ~HybridTable(){
//
// }
// bool getSamples(uint64_t colorID,uint8_t colorType,vector<uint32_t>& res);
// bool setColor(uint64_t colorID,uint8_t colorType,vector<uint32_t>& v);
// void save(string folderName)override;
// private:
// vector<unique_ptr<samplesCombination> > combinations;
// BitVectorsTable bitvectors;
// uint64_t lastBVpointer;
// };
//
//
#endif