-
Notifications
You must be signed in to change notification settings - Fork 1
/
url_gen.cpp
79 lines (76 loc) · 2.36 KB
/
url_gen.cpp
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
#include <kcpolydb.h>
using namespace std;
using namespace kyotocabinet;
class UrlGenerator
{
HashDB db;
map<int, int> lookup;
vector <char> chars;
string current_str;
int r;
void fillLookup()
{
for(int i=0; i<chars.size(); i++)
{
lookup[chars[i]]=i;
}
}
string increase() { return increase(current_str.length()-1); }
string increase(int r)
{
if(r<0)
{
current_str="0"+current_str;
r=0;
}
else if(current_str[r]=='-')
{
current_str[r]='0';
increase(r-1);
}
else
{
int next=(lookup[current_str[r]]+1)%chars.size();
cout << next;
current_str[r]=chars[next];
}
db.set("current_str", current_str);
}
public:
UrlGenerator() : current_str("0"), r(0)
{
char chrs [] =
{
'0','1','2','3','4','5','6','7','8','9',
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Z',
'_','-'
};
vector <char> charx (chrs, chrs + sizeof(chrs)/ sizeof(chrs[0]));
chars=charx;
fillLookup();
// open the database
if (!db.open("casket.kch", HashDB::OWRITER | HashDB::OCREATE)) {
cerr << "open error: " << db.error().name() << endl;
}
// retrieve last_url
if (db.get("current_str", ¤t_str)) {
cout << "Last Url:" << current_str << endl;
} else {
cout << "No last url, resetting to 0" << endl;
db.set("current_str", "0");
current_str="0";
}
}
~UrlGenerator()
{
if (!db.close()) {
cerr << "close error: " << db.error().name() << endl;
}
}
bool next(string url)
{
cout << increase(current_str.length()-1);
return 1; //return db.set(increase(), udrl);
}
};