|
xapian-core
2.0.0
|
#include <glass_spelling.h>
Inheritance diagram for GlassSpellingTable:
Collaboration diagram for GlassSpellingTable:Public Member Functions | |
| GlassSpellingTable (const std::string &dbdir, bool readonly) | |
| Create a new GlassSpellingTable object. More... | |
| GlassSpellingTable (int fd, off_t offset_, bool readonly) | |
| void | merge_changes () |
| Merge in batched-up changes. More... | |
| void | add_word (std::string_view word, Xapian::termcount freqinc) |
| Xapian::termcount | remove_word (std::string_view word, Xapian::termcount freqdec) |
| TermList * | open_termlist (std::string_view word) |
| Xapian::doccount | get_word_frequency (std::string_view word) const |
| void | set_wordfreq_upper_bound (Xapian::termcount ub) |
| bool | is_modified () const |
| Override methods of GlassTable. More... | |
| Xapian::termcount | flush_db () |
| Returns updated wordfreq upper bound. More... | |
| void | cancel (const RootInfo &root_info, glass_revision_number_t rev) |
| Override methods of GlassTable. More... | |
Public Member Functions inherited from GlassLazyTable | |
| GlassLazyTable (const char *name_, std::string_view path, bool readonly) | |
| Create a new lazy table. More... | |
| GlassLazyTable (const char *name_, int fd, off_t offset_, bool readonly) | |
Public Member Functions inherited from GlassTable | |
| GlassTable (const char *tablename_, std::string_view path_, bool readonly_, bool lazy=false) | |
| Create a new Btree object. More... | |
| GlassTable (const char *tablename_, int fd, off_t offset_, bool readonly_, bool lazy=false) | |
| ~GlassTable () | |
| Close the Btree. More... | |
| void | close (bool permanent=false) |
| Close the Btree. More... | |
| bool | readahead_key (std::string_view key) const |
| bool | exists () const |
| Determine whether the btree exists on disk. More... | |
| void | open (int flags_, const RootInfo &root_info, glass_revision_number_t rev) |
| Open the btree. More... | |
| bool | is_open () const |
| Return true if this table is open. More... | |
| bool | is_writable () const |
| Return true if this table is writable. More... | |
| void | flush_db () |
| Flush any outstanding changes to the DB file of the table. More... | |
| void | commit (glass_revision_number_t revision, RootInfo *root_info) |
| Commit any outstanding changes to the table. More... | |
| bool | sync () |
| void | cancel (const RootInfo &root_info, glass_revision_number_t rev) |
| Cancel any outstanding changes. More... | |
| bool | get_exact_entry (std::string_view key, std::string &tag) const |
| Read an entry from the table, if and only if it is exactly that being asked for. More... | |
| bool | key_exists (std::string_view key) const |
| Check if a key exists in the Btree. More... | |
| bool | read_tag (Glass::Cursor *C_, std::string *tag, bool keep_compressed) const |
| Read the tag value for the key pointed to by cursor C_. More... | |
| void | add (std::string_view key, std::string_view tag, bool already_compressed=false) |
| Add a key/tag pair to the table, replacing any existing pair with the same key. More... | |
| bool | del (std::string_view key) |
| Delete an entry from the table. More... | |
| int | get_flags () const |
| void | set_flags (int new_flags) |
| void | create_and_open (int flags_, const RootInfo &root_info) |
| Create a new empty btree structure on disk and open it at the initial revision. More... | |
| void | set_full_compaction (bool parity) |
| glass_revision_number_t | get_open_revision_number () const |
| Get the revision number at which this table is currently open. More... | |
| glass_tablesize_t | get_entry_count () const |
| Return a count of the number of entries in the table. More... | |
| bool | empty () const |
| Return true if there are no entries in the table. More... | |
| GlassCursor * | cursor_get () const |
| Get a cursor for reading from the table. More... | |
| bool | is_modified () const |
| Determine whether the object contains uncommitted modifications. More... | |
| void | set_max_item_size (size_t block_capacity) |
| Set the maximum item size given the block capacity. More... | |
| void | set_changes (GlassChanges *changes) |
| Set the GlassChanges object to write changed blocks to. More... | |
| string | get_path () const |
Private Member Functions | |
| void | toggle_word (std::string_view word) |
| void | toggle_fragment (Glass::fragment frag, std::string_view word) |
Private Attributes | |
| std::map< std::string, Xapian::termcount, std::less<> > | wordfreq_changes |
| std::map< Glass::fragment, std::set< std::string > > | termlist_deltas |
| Changes to make to the termlists. More... | |
| Xapian::termcount | wordfreq_upper_bound = 0 |
| Used to track an upper bound on wordfreq. More... | |
Additional Inherited Members | |
Static Public Member Functions inherited from GlassTable | |
| static void | throw_database_closed () |
| Throw an exception indicating that the database is closed. More... | |
Protected Member Functions inherited from GlassTable | |
| bool | find (Glass::Cursor *) const |
| find(C_) searches for the key of B->kt in the B-tree. More... | |
| int | delete_kt () |
| void | read_block (uint4 n, uint8_t *p) const |
| read_block(n, p) reads block n of the DB file to address p. More... | |
| void | write_block (uint4 n, const uint8_t *p, bool appending=false) const |
| write_block(n, p, appending) writes block n in the DB file from address p. More... | |
| void | throw_overwritten () const |
| void | block_to_cursor (Glass::Cursor *C_, int j, uint4 n) const |
| void | alter () |
| Btree::alter(); is called when the B-tree is to be altered. More... | |
| void | compact (uint8_t *p) |
| compact(p) compact the block at p by shuffling all the items up to the end. More... | |
| void | enter_key_above_leaf (Glass::LeafItem previtem, Glass::LeafItem newitem) |
| enter_key_above_leaf(previtem, newitem) is called after a leaf block split. More... | |
| void | enter_key_above_branch (int j, Glass::BItem newitem) |
| enter_key_above_branch(j, newkey) is called after a branch block split. More... | |
| int | mid_point (uint8_t *p) const |
| mid_point(p) finds the directory entry in c that determines the approximate mid point of the data in the block at p. More... | |
| void | add_item_to_leaf (uint8_t *p, Glass::LeafItem kt, int c) |
| add_item_to_leaf(p, kt_, c) adds item kt_ to the leaf block at p. More... | |
| void | add_item_to_branch (uint8_t *p, Glass::BItem kt, int c) |
| add_item_to_branch(p, kt_, c) adds item kt_ to the branch block at p. More... | |
| void | add_leaf_item (Glass::LeafItem kt) |
| GlassTable::add_leaf_item(kt_) adds item kt_ to the leaf block. More... | |
| void | add_branch_item (Glass::BItem kt, int j) |
| GlassTable::add_item(kt_, j) adds item kt_ to the block at cursor level C[j]. More... | |
| void | delete_leaf_item (bool repeatedly) |
| GlassTable::delete_leaf_item(repeatedly) is (almost) the converse of add_leaf_item. More... | |
| void | delete_branch_item (int j) |
| GlassTable::delete_branch_item(j, repeatedly) is (almost) the converse of add_branch_item. More... | |
| int | add_kt (bool found) |
| add_kt(found) adds the item (key-tag pair) at B->kt into the B-tree, using cursor C. More... | |
| void | read_root () |
| void | split_root (uint4 split_n) |
| Btree needs to gain a new level to insert more items: so split root block and construct a new one. More... | |
| void | form_key (std::string_view key) const |
| bool | single_file () const |
| bool | prev (Glass::Cursor *C_, int j) const |
| bool | next (Glass::Cursor *C_, int j) const |
| bool | prev_default (Glass::Cursor *C_, int j) const |
| bool | next_default (Glass::Cursor *C_, int j) const |
| bool | prev_for_sequential (Glass::Cursor *C_, int dummy) const |
| bool | next_for_sequential (Glass::Cursor *C_, int dummy) const |
Static Protected Member Functions inherited from GlassTable | |
| static int | find_in_leaf (const uint8_t *p, Glass::LeafItem item, int c, bool &exact) |
| find_in_leaf(p, key, c, exact) searches for the key in the leaf block at p. More... | |
| static int | find_in_branch (const uint8_t *p, Glass::LeafItem item, int c) |
| static int | find_in_branch (const uint8_t *p, Glass::BItem item, int c) |
| static uint4 | block_given_by (const uint8_t *p, int c) |
| block_given_by(p, c) finds the item at block address p, directory offset c, and returns its tag value as an integer. More... | |
Protected Attributes inherited from GlassTable | |
| const char * | tablename |
| The name of the table (used when writing changesets). More... | |
| glass_revision_number_t | revision_number |
| revision number of the opened B-tree. More... | |
| glass_tablesize_t | item_count |
| keeps a count of the number of items in the B-tree. More... | |
| unsigned int | block_size |
| block size of the B tree in bytes More... | |
| int | flags |
| Flags like DB_NO_SYNC and DB_DANGEROUS. More... | |
| bool | faked_root_block |
| true if the root block is faked (not written to disk). More... | |
| bool | sequential |
| true iff the data has been written in a single write in sequential order. More... | |
| int | handle |
| File descriptor of the table. More... | |
| int | level |
| number of levels, counting from 0 More... | |
| uint4 | root |
| the root block of the B-tree More... | |
| Glass::LeafItem_wr | kt |
| buffer of size block_size for making up key-tag items More... | |
| uint8_t * | buffer |
| buffer of size block_size for reforming blocks More... | |
| GlassFreeList | free_list |
| List of free blocks. More... | |
| std::string | name |
| The path name of the B tree. More... | |
| int | seq_count |
| count of the number of successive instances of purely sequential addition, starting at SEQ_START_POINT (neg) and going up to zero. More... | |
| uint4 | changed_n |
| the last block to be changed by an addition More... | |
| int | changed_c |
| directory offset corresponding to last block to be changed by an addition More... | |
| size_t | max_item_size |
| maximum size of an item (key-tag pair) More... | |
| bool | Btree_modified |
| Set to true the first time the B-tree is modified. More... | |
| bool | full_compaction |
| set to true when full compaction is to be achieved More... | |
| bool | writable |
| Set to true when the database is opened to write. More... | |
| bool | cursor_created_since_last_modification |
| Flag for tracking when cursors need to rebuild. More... | |
| unsigned long | cursor_version |
| Version count for tracking when cursors need to rebuild. More... | |
| GlassChanges * | changes_obj |
| The GlassChanges object to write block changes to. More... | |
| Glass::Cursor | C [GLASS_BTREE_CURSOR_LEVELS] |
| uint8_t * | split_p |
| Buffer used when splitting a block. More... | |
| uint4 | compress_min |
| Minimum size tag to try compressing (0 for no compression). More... | |
| CompressionStream | comp_stream |
| bool | lazy |
| If true, don't create the table until it's needed. More... | |
| uint4 | last_readahead |
| Last block readahead_key() preread. More... | |
| off_t | offset |
| offset to start of table in file. More... | |
Definition at line 64 of file glass_spelling.h.
|
inline |
Create a new GlassSpellingTable object.
This method does not create or open the table on disk - you must call the create() or open() methods respectively!
| dbdir | The directory the glass database is stored in. |
| readonly | true if we're opening read-only, else false. |
Definition at line 92 of file glass_spelling.h.
|
inline |
Definition at line 95 of file glass_spelling.h.
| void GlassSpellingTable::add_word | ( | std::string_view | word, |
| Xapian::termcount | freqinc | ||
| ) |
Definition at line 129 of file glass_spelling.cc.
References p, and unpack_uint_last().
Referenced by GlassWritableDatabase::add_spelling().
|
inline |
Override methods of GlassTable.
NB: these aren't virtual, but we always call them on the subclass in cases where it matters.
Definition at line 134 of file glass_spelling.h.
References GlassTable::cancel(), termlist_deltas, and wordfreq_changes.
Referenced by GlassDatabase::cancel().
|
inline |
Returns updated wordfreq upper bound.
Definition at line 128 of file glass_spelling.h.
References GlassTable::flush_db(), merge_changes(), and wordfreq_upper_bound.
Referenced by GlassDatabase::set_revision_number().
| Xapian::doccount GlassSpellingTable::get_word_frequency | ( | std::string_view | word | ) | const |
Definition at line 356 of file glass_spelling.cc.
References p, and unpack_uint_last().
Referenced by GlassDatabase::get_spelling_frequency().
|
inline |
Override methods of GlassTable.
NB: these aren't virtual, but we always call them on the subclass in cases where it matters.
Definition at line 123 of file glass_spelling.h.
References GlassTable::is_modified(), and wordfreq_changes.
Referenced by GlassDatabase::apply(), and GlassWritableDatabase::has_uncommitted_changes().
| void GlassSpellingTable::merge_changes | ( | ) |
Merge in batched-up changes.
Definition at line 46 of file glass_spelling.cc.
References PrefixCompressedStringWriter::append(), Assert, PrefixCompressedStringItor::at_end(), and pack_uint_last().
Referenced by flush_db(), and GlassWritableDatabase::open_spelling_wordlist().
| TermList * GlassSpellingTable::open_termlist | ( | std::string_view | word | ) |
Definition at line 263 of file glass_spelling.cc.
References Assert, AssertRel, Glass::fragment::data, and make_termlist_merger().
Referenced by GlassDatabase::open_spelling_termlist().
| Xapian::termcount GlassSpellingTable::remove_word | ( | std::string_view | word, |
| Xapian::termcount | freqdec | ||
| ) |
Definition at line 164 of file glass_spelling.cc.
References p, and unpack_uint_last().
Referenced by GlassWritableDatabase::remove_spelling().
|
inline |
Definition at line 112 of file glass_spelling.h.
References wordfreq_upper_bound.
Referenced by GlassDatabase::cancel(), and GlassDatabase::open_tables().
|
private |
Definition at line 113 of file glass_spelling.cc.
|
private |
Definition at line 213 of file glass_spelling.cc.
References Glass::fragment::data.
|
private |
Changes to make to the termlists.
This list is essentially xor-ed with the list on disk, so an entry here either means a new entry needs to be added on disk, or an existing entry on disk needs to be removed. We do it this way so we don't need to store an additional add/remove flag for every word.
Definition at line 78 of file glass_spelling.h.
Referenced by cancel().
|
private |
Definition at line 68 of file glass_spelling.h.
Referenced by cancel(), and is_modified().
|
private |
Used to track an upper bound on wordfreq.
Definition at line 81 of file glass_spelling.h.
Referenced by flush_db(), and set_wordfreq_upper_bound().