80 lines
1.3 KiB
C++
80 lines
1.3 KiB
C++
/**
|
|
* Copyright 2014 (c) Anna Schumaker.
|
|
*/
|
|
#include <core/index.h>
|
|
|
|
|
|
index_entry :: index_entry()
|
|
{
|
|
ie_set = SET_INIT();
|
|
}
|
|
|
|
index_entry :: index_entry(const std::string &key)
|
|
: ie_key(key)
|
|
{
|
|
ie_set = SET_INIT();
|
|
}
|
|
|
|
index_entry :: ~index_entry()
|
|
{
|
|
set_deinit(&ie_set);
|
|
}
|
|
|
|
const std::string index_entry :: primary_key() const
|
|
{
|
|
return ie_key;
|
|
}
|
|
|
|
void index_entry :: write(file &file)
|
|
{
|
|
file_writef(&file, "%s\n" , ie_key.c_str());
|
|
set_write(&file, &ie_set);
|
|
}
|
|
|
|
void index_entry :: read(file &file)
|
|
{
|
|
gchar *key = file_readl(&file);
|
|
|
|
ie_key = key;
|
|
g_free(key);
|
|
|
|
set_read(&file, &ie_set);
|
|
}
|
|
|
|
|
|
|
|
void index_init(database<index_entry> *index, const gchar *filepath,
|
|
bool autosave)
|
|
{
|
|
db_init(index, filepath, autosave);
|
|
}
|
|
|
|
index_entry *index_insert(database<index_entry> *index, const gchar *key,
|
|
unsigned int value)
|
|
{
|
|
index_entry *it = db_find(index, key);
|
|
|
|
set_insert(&it->ie_set, value);
|
|
db_autosave(index);
|
|
return it;
|
|
}
|
|
|
|
void index_remove(database<index_entry> *index, const gchar *key,
|
|
unsigned int value)
|
|
{
|
|
index_entry *it = db_get(index, key);
|
|
if (it) {
|
|
set_remove(&it->ie_set, value);
|
|
db_autosave(index);
|
|
}
|
|
}
|
|
|
|
bool index_has(database<index_entry> *index, const gchar *key, unsigned int value)
|
|
{
|
|
index_entry *it = db_get(index, key);
|
|
|
|
if (!it)
|
|
return false;
|
|
return set_has(&it->ie_set, value);
|
|
}
|