/** * Copyright 2014 (c) Anna Schumaker. */ #include index_entry :: index_entry() {} index_entry :: index_entry(const std::string &key) : ie_key(key) {} const std::string index_entry :: primary_key() const { return ie_key; } typename index_entry::iterator index_entry :: begin() { return ie_set.begin(); } typename index_entry::iterator index_entry :: end() { return ie_set.end(); } void index_entry :: write(file &file) { std::set::iterator it; file_writef(&file, "%s\n%zu ", ie_key.c_str(), ie_set.size()); for (it = ie_set.begin(); it != ie_set.end(); it++) file_writef(&file, "%u ", *it); } void index_entry :: read(file &file) { unsigned int num, val; gchar *key = file_readl(&file); file_readf(&file, "%u ", &num); ie_key = key; g_free(key); for (unsigned int i = 0; i < num; i++) { file_readf(&file, "%u", &val); ie_set.insert(val); } } void index_init(database *index, const gchar *filepath, bool autosave) { db_init(index, filepath, autosave); } index_entry *index_insert(database *index, const gchar *key, unsigned int value) { index_entry *it = db_find(index, key); it->ie_set.insert(value); db_autosave(index); return it; } void index_remove(database *index, const gchar *key, unsigned int value) { index_entry *it = db_get(index, key); if (it) { it->ie_set.erase(value); db_autosave(index); } } bool index_has(database *index, const gchar *key, unsigned int value) { index_entry *it = db_get(index, key); if (!it) return false; return it->ie_set.find(value) != it->ie_set.end(); }