-
Notifications
You must be signed in to change notification settings - Fork 1
/
Dictionary.h
84 lines (71 loc) · 1.68 KB
/
Dictionary.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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*
* Dictionary.h
*
* Created on: Sep 23, 2016
* Author: duclv
*/
#ifndef DICTIONARY_H_
#define DICTIONARY_H_
#include "ColumnBase.h"
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
template<class T>
class Dictionary {
private:
struct invertedIndex {
string word;
char position; // position on text
vector<size_t> location; // position on dictionary
// functions
bool operator<(const invertedIndex& a) const
{
return word < a.word;
}
bool operator==(const invertedIndex& a) const
{
return word == a.word;
}
};
vector<T>* items;
bool sorted = false;
std::unordered_map<T, size_t>* sMap;
vector<T>* bulkVecValue;
vector<invertedIndex>* vecIndexLevel0;
public:
Dictionary() {
items = new vector<T>();
sMap = new unordered_map<T, size_t>();
bulkVecValue = new vector<T>();
vecIndexLevel0 = new vector<invertedIndex>();
}
virtual ~Dictionary() {
delete items;
delete vecIndexLevel0;
delete sMap;
delete bulkVecValue;
}
T* lookup(size_t index);
void search(T& value, ColumnBase::OP_TYPE opType, vector<size_t>& result);
void searchWithSorted(T& value, ColumnBase::OP_TYPE opType, vector<size_t>& result);
void searchWithNoSorted(T& value, ColumnBase::OP_TYPE opType, vector<size_t>& result);
size_t addNewElement(T& value, vector<size_t>* vecValue, bool sorted, bool bulkInsert);
size_t size();
void print(int row);
void buildInvertedIndex();
void sort();
vector<T>* getBulkVecValue() {
return bulkVecValue;
}
void setSorted(bool sorted) {
this->sorted = sorted;
}
bool getSorted() {
return this->sorted;
}
void clearTemp() {
bulkVecValue->resize(0);
}
};
#endif /* DICTIONARY_H_ */