Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2152)

Unified Diff: third_party/hunspell/src/hunspell/hashmgr.hxx

Issue 2239005: Merges our hunspell change to hunspell 1.2.10.... (Closed) Base URL: svn://chrome-svn.corp.google.com/chrome/trunk/deps/
Patch Set: '' Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/hunspell/src/hunspell/filemgr.cxx ('k') | third_party/hunspell/src/hunspell/hashmgr.cxx » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/hunspell/src/hunspell/hashmgr.hxx
===================================================================
--- third_party/hunspell/src/hunspell/hashmgr.hxx (revision 50428)
+++ third_party/hunspell/src/hunspell/hashmgr.hxx (working copy)
@@ -8,10 +8,25 @@
#include "htypes.hxx"
#include "filemgr.hxx"
+#ifdef HUNSPELL_CHROME_CLIENT
+#include <string>
+#include <map>
+
+#include "base/stl_util-inl.h"
+#include "base/string_piece.h"
+#include "third_party/hunspell/google/bdict_reader.h"
+#endif
+
enum flag { FLAG_CHAR, FLAG_LONG, FLAG_NUM, FLAG_UNI };
class LIBHUNSPELL_DLL_EXPORTED HashMgr
{
+#ifdef HUNSPELL_CHROME_CLIENT
+ // Not owned by this class, owned by the Hunspell object.
+ hunspell::BDictReader* bdict_reader;
+ std::map<base::StringPiece, int> custom_word_to_affix_id_map_;
+ std::vector<std::string*> pointer_to_strings_;
+#endif
int tablesize;
struct hentry ** tableptr;
int userword;
@@ -34,7 +49,23 @@
public:
+#ifdef HUNSPELL_CHROME_CLIENT
+ HashMgr(hunspell::BDictReader* reader);
+
+ // Return the hentry corresponding to the given word. Returns NULL if the
+ // word is not there in the cache.
+ hentry* GetHentryFromHEntryCache(char* word);
+
+ // Called before we do a new operation. This will empty the cache of pointers
+ // to hentries that we have cached. In Chrome, we make these on-demand, but
+ // they must live as long as the single spellcheck operation that they're part
+ // of since Hunspell will save pointers to various ones as it works.
+ //
+ // This function allows that cache to be emptied and not grow infinitely.
+ void EmptyHentryCache();
+#else
HashMgr(const char * tpath, const char * apath, const char * key = NULL);
+#endif
~HashMgr();
struct hentry * lookup(const char *) const;
@@ -59,6 +90,40 @@
int al, const char * desc, bool onlyupcase);
int load_config(const char * affpath, const char * key);
int parse_aliasf(char * line, FileMgr * af);
+
+#ifdef HUNSPELL_CHROME_CLIENT
+ // Loads the AF lines from a BDICT.
+ // A BDICT file compresses its AF lines to save memory.
+ // This function decompresses each AF line and call parse_aliasf().
+ int LoadAFLines();
+
+ // Helper functions that create a new hentry struct, initialize it, and
+ // delete it.
+ // These functions encapsulate non-trivial operations in creating and
+ // initializing a hentry struct from BDICT data to avoid changing code so much
+ // even when a hentry struct is changed.
+ hentry* InitHashEntry(hentry* entry,
+ size_t item_size,
+ const char* word,
+ int word_length,
+ int affix_index) const;
+ hentry* CreateHashEntry(const char* word,
+ int word_length,
+ int affix_index) const;
+ void DeleteHashEntry(hentry* entry) const;
+
+ // Converts the list of affix IDs to a linked list of hentry structures. The
+ // hentry structures will point to the given word. The returned pointer will
+ // be a statically allocated variable that will change for the next call. The
+ // |word| buffer must be the same.
+ hentry* AffixIDsToHentry(char* word, int* affix_ids, int affix_count) const;
+
+ // See EmptyHentryCache above. Note that each one is actually a linked list
+ // followed by the homonym pointer.
+ typedef std::map<std::string, hentry*> HEntryCache;
+ HEntryCache hentry_cache;
+#endif
+
int add_hidden_capitalized_word(char * word, int wbl, int wcl,
unsigned short * flags, int al, char * dp, int captype);
int parse_aliasm(char * line, FileMgr * af);
« no previous file with comments | « third_party/hunspell/src/hunspell/filemgr.cxx ('k') | third_party/hunspell/src/hunspell/hashmgr.cxx » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698