index: Add in save and load functionality
Signed-off-by: Anna Schumaker <schumaker.anna@gmail.com>
This commit is contained in:
parent
be0d3f3da4
commit
379a96fe13
|
@ -30,6 +30,7 @@ Index: (lib/index.cpp)
|
||||||
const set<unsigned int> &operator[](string);
|
const set<unsigned int> &operator[](string);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
File << keys.size() << endl;
|
||||||
File << key << endl;
|
File << key << endl;
|
||||||
File << map[key].size() << int_0 << int_1 << ... << int_n << endl;
|
File << map[key].size() << int_0 << int_1 << ... << int_n << endl;
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,8 @@ private:
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Index(std::string);
|
Index(std::string);
|
||||||
|
void save();
|
||||||
|
void load();
|
||||||
|
|
||||||
void insert(std::string, unsigned int);
|
void insert(std::string, unsigned int);
|
||||||
void remove(std::string);
|
void remove(std::string);
|
||||||
|
|
|
@ -10,6 +10,48 @@ Index :: Index(std::string filepath)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Index :: save()
|
||||||
|
{
|
||||||
|
std::set<std::string>::iterator k_it;
|
||||||
|
std::set<unsigned int>::iterator u_it;
|
||||||
|
|
||||||
|
if (file.open(OPEN_WRITE) == false)
|
||||||
|
return;
|
||||||
|
|
||||||
|
file << keys.size();
|
||||||
|
for (k_it = keys.begin(); k_it != keys.end(); k_it++) {
|
||||||
|
file << *k_it << std::endl;
|
||||||
|
file << index[*k_it].size() << " ";
|
||||||
|
|
||||||
|
for (u_it = index[*k_it].begin(); u_it != index[*k_it].end(); u_it++)
|
||||||
|
file << *u_it << " ";
|
||||||
|
|
||||||
|
file << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Index :: load()
|
||||||
|
{
|
||||||
|
std::string key;
|
||||||
|
unsigned int num_keys, num_values, value;
|
||||||
|
|
||||||
|
if (file.open(OPEN_READ) == false)
|
||||||
|
return;
|
||||||
|
|
||||||
|
file >> num_keys;
|
||||||
|
for (unsigned int i = 0; i < num_keys; i++) {
|
||||||
|
file >> key >> num_values;
|
||||||
|
for (unsigned int j = 0; j < num_values; j++) {
|
||||||
|
file >> value;
|
||||||
|
insert(key, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
file.close();
|
||||||
|
}
|
||||||
|
|
||||||
void Index :: insert(std::string key, unsigned int value)
|
void Index :: insert(std::string key, unsigned int value)
|
||||||
{
|
{
|
||||||
if (index.find(key) == index.end()) {
|
if (index.find(key) == index.end()) {
|
||||||
|
|
|
@ -113,10 +113,37 @@ void test_2()
|
||||||
print_index(index);
|
print_index(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Save the database to disk
|
||||||
|
*/
|
||||||
|
void test_3()
|
||||||
|
{
|
||||||
|
print("Test 3\n");
|
||||||
|
Index index("test.idx");
|
||||||
|
|
||||||
|
populate_index(index);
|
||||||
|
remove_values(index);
|
||||||
|
index.save();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Reload the database from disk
|
||||||
|
*/
|
||||||
|
void test_4()
|
||||||
|
{
|
||||||
|
print("Test 4\n");
|
||||||
|
Index index("test.idx");
|
||||||
|
|
||||||
|
index.load();
|
||||||
|
print_index(index);
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
test_0();
|
test_0();
|
||||||
test_1();
|
test_1();
|
||||||
test_2();
|
test_2();
|
||||||
|
test_3();
|
||||||
|
test_4();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,3 +73,32 @@ index[x] = {1 2 3 4 5 6 7 8 9}
|
||||||
index[y] = {2 3 4 5 6 7 8 9}
|
index[y] = {2 3 4 5 6 7 8 9}
|
||||||
index[z] = {3 4 5 6 7 8 9}
|
index[z] = {3 4 5 6 7 8 9}
|
||||||
|
|
||||||
|
Test 3
|
||||||
|
Test 4
|
||||||
|
=== Printing index ===
|
||||||
|
Found keys: a b c d e f g h i j l m n o p q r s t u w x y z
|
||||||
|
index[a] = {0 1 2 3 4 5 6 7 8 9}
|
||||||
|
index[b] = {1 2 3 4 5 6 7 8 9}
|
||||||
|
index[c] = {2 3 4 5 6 7 8 9}
|
||||||
|
index[d] = {3 4 5 6 7 8 9}
|
||||||
|
index[e] = {4 5 6 7 8 9}
|
||||||
|
index[f] = {5 6 7 8 9}
|
||||||
|
index[g] = {6 7 8 9}
|
||||||
|
index[h] = {7 8 9}
|
||||||
|
index[i] = {8 9}
|
||||||
|
index[j] = {9}
|
||||||
|
index[l] = {0 1 2 3 4 5 6 7 8 9}
|
||||||
|
index[m] = {1 2 3 4 5 6 7 8 9}
|
||||||
|
index[n] = {2 3 4 5 6 7 8 9}
|
||||||
|
index[o] = {3 4 5 6 7 8 9}
|
||||||
|
index[p] = {4 5 6 7 8 9}
|
||||||
|
index[q] = {5 6 7 8 9}
|
||||||
|
index[r] = {6 7 8 9}
|
||||||
|
index[s] = {7 8 9}
|
||||||
|
index[t] = {8 9}
|
||||||
|
index[u] = {9}
|
||||||
|
index[w] = {0 1 2 3 4 5 6 7 8 9}
|
||||||
|
index[x] = {1 2 3 4 5 6 7 8 9}
|
||||||
|
index[y] = {2 3 4 5 6 7 8 9}
|
||||||
|
index[z] = {3 4 5 6 7 8 9}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user