-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvalue.h
137 lines (114 loc) · 2.61 KB
/
value.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
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
#include "AVL.h"
using namespace std;
#define MAX_EXPIRE_TIME 1e14
/*
NormalValue means string and
SetValue means Sorted Set
*/
enum TYPE {NORMAL_VALUE, SET_VALUE};
/*
Value can be Normal or Set value.
*/
class Value
{
private:
long long int expire_time; //stores expire time in second.
TYPE type; //type of value. (String or Sorted Set)
public:
Value()
{
expire_time = MAX_EXPIRE_TIME;
}
long long int GetExpireTime()
{
return expire_time;
}
void SetExpireTime(long long int expire_time)
{
this->expire_time = expire_time;
}
TYPE GetType()
{
return type;
}
void SetType(TYPE type)
{
this->type = type;
}
};
/*
Value is String
*/
class NormalValue : public Value
{
private:
string value;
public:
NormalValue()
{
this->SetType(NORMAL_VALUE);
}
NormalValue(string value, long long int expire_time=MAX_EXPIRE_TIME) : NormalValue()
{
this->value = value;
this->SetExpireTime(expire_time);
}
string getValue()
{
return value;
}
void setValue(string value)
{
this->value = value;
}
};
/*
Value is Set.
*/
class SetValue : public Value
{
private:
AVLTree tree; //tree is instance.
map<string, long long int> value_to_score; //stores score of value
public:
SetValue()
{
this->SetType(SET_VALUE);
}
SetValue(AVLTree tree, long long int expire_time=MAX_EXPIRE_TIME) : SetValue()
{
this->tree = tree;
this->SetExpireTime(expire_time);
}
AVLTree getTreeInstance()
{
return tree;
}
void setTreeInstance(AVLTree tree)
{
this->tree = tree;
}
void setTreeInstanceRoot(Node* root)
{
this->tree.root = root;
}
void setValueToScore(string value, long long int score)
{
this->value_to_score[value] = score;
}
bool checkIsValueExist(string value)
{
if(this->value_to_score.find(value) != this->value_to_score.end())
return true;
return false;
}
long long int getScoreFromValue(string value)
{
return this->value_to_score[value];
}
~SetValue()
{
delete tree.root;
value_to_score.clear();
}
};