diff options
author | Peter Breitenlohner <peb@mppmu.mpg.de> | 2011-08-10 12:03:08 +0000 |
---|---|---|
committer | Peter Breitenlohner <peb@mppmu.mpg.de> | 2011-08-10 12:03:08 +0000 |
commit | 79b8b3a76d8eda7372bb4dedae0ec7aebdaebc12 (patch) | |
tree | 9e4992c8719febb576deb6120740611380d71f7a /Build/source/libs/icu/icu-4.8.1/common/triedict.h | |
parent | 8cd13eb8f4bb7b92c6d9bb50aff9a62c37df026c (diff) |
icu 4.8.1
git-svn-id: svn://tug.org/texlive/trunk@23480 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/libs/icu/icu-4.8.1/common/triedict.h')
-rw-r--r-- | Build/source/libs/icu/icu-4.8.1/common/triedict.h | 346 |
1 files changed, 346 insertions, 0 deletions
diff --git a/Build/source/libs/icu/icu-4.8.1/common/triedict.h b/Build/source/libs/icu/icu-4.8.1/common/triedict.h new file mode 100644 index 00000000000..b8796617690 --- /dev/null +++ b/Build/source/libs/icu/icu-4.8.1/common/triedict.h @@ -0,0 +1,346 @@ +/** + ******************************************************************************* + * Copyright (C) 2006, International Business Machines Corporation and others. * + * All Rights Reserved. * + ******************************************************************************* + */ + +#ifndef TRIEDICT_H +#define TRIEDICT_H + +#include "unicode/utypes.h" +#include "unicode/uobject.h" +#include "unicode/utext.h" + +struct UEnumeration; +struct UDataSwapper; +struct UDataMemory; + + /** + * <p>UDataSwapFn function for use in swapping a compact dictionary.</p> + * + * @param ds Pointer to UDataSwapper containing global data about the + * transformation and function pointers for handling primitive + * types. + * @param inData Pointer to the input data to be transformed or examined. + * @param length Length of the data, counting bytes. May be -1 for preflighting. + * If length>=0, then transform the data. + * If length==-1, then only determine the length of the data. + * The length cannot be determined from the data itself for all + * types of data (e.g., not for simple arrays of integers). + * @param outData Pointer to the output data buffer. + * If length>=0 (transformation), then the output buffer must + * have a capacity of at least length. + * If length==-1, then outData will not be used and can be NULL. + * @param pErrorCode ICU UErrorCode parameter, must not be NULL and must + * fulfill U_SUCCESS on input. + * @return The actual length of the data. + * + * @see UDataSwapper + */ + +U_CAPI int32_t U_EXPORT2 +triedict_swap(const UDataSwapper *ds, + const void *inData, int32_t length, void *outData, + UErrorCode *pErrorCode); + +U_NAMESPACE_BEGIN + +class StringEnumeration; +struct CompactTrieHeader; + +/******************************************************************* + * TrieWordDictionary + */ + +/** + * <p>TrieWordDictionary is an abstract class that represents a word + * dictionary based on a trie. The base protocol is read-only. + * Subclasses may allow writing.</p> + */ +class U_COMMON_API TrieWordDictionary : public UMemory { + public: + + /** + * <p>Default constructor.</p> + * + */ + TrieWordDictionary(); + + /** + * <p>Virtual destructor.</p> + */ + virtual ~TrieWordDictionary(); + + /** + * <p>Find dictionary words that match the text.</p> + * + * @param text A UText representing the text. The + * iterator is left after the longest prefix match in the dictionary. + * @param start The current position in text. + * @param maxLength The maximum number of code units to match. + * @param lengths An array that is filled with the lengths of words that matched. + * @param count Filled with the number of elements output in lengths. + * @param limit The size of the lengths array; this limits the number of words output. + * @return The number of characters in text that were matched. + */ + virtual int32_t matches( UText *text, + int32_t maxLength, + int32_t *lengths, + int &count, + int limit ) const = 0; + + /** + * <p>Return a StringEnumeration for iterating all the words in the dictionary.</p> + * + * @param status A status code recording the success of the call. + * @return A StringEnumeration that will iterate through the whole dictionary. + * The caller is responsible for closing it. The order is unspecified. + */ + virtual StringEnumeration *openWords( UErrorCode &status ) const = 0; + +}; + +/******************************************************************* + * MutableTrieDictionary + */ + +/** + * <p>MutableTrieDictionary is a TrieWordDictionary that allows words to be + * added.</p> + */ + +struct TernaryNode; // Forwards declaration + +class U_COMMON_API MutableTrieDictionary : public TrieWordDictionary { + private: + /** + * The root node of the trie + * @internal + */ + + TernaryNode *fTrie; + + /** + * A UText for internal use + * @internal + */ + + UText *fIter; + + friend class CompactTrieDictionary; // For fast conversion + + public: + + /** + * <p>Constructor.</p> + * + * @param median A UChar around which to balance the trie. Ideally, it should + * begin at least one word that is near the median of the set in the dictionary + * @param status A status code recording the success of the call. + */ + MutableTrieDictionary( UChar median, UErrorCode &status ); + + /** + * <p>Virtual destructor.</p> + */ + virtual ~MutableTrieDictionary(); + + /** + * <p>Find dictionary words that match the text.</p> + * + * @param text A UText representing the text. The + * iterator is left after the longest prefix match in the dictionary. + * @param maxLength The maximum number of code units to match. + * @param lengths An array that is filled with the lengths of words that matched. + * @param count Filled with the number of elements output in lengths. + * @param limit The size of the lengths array; this limits the number of words output. + * @return The number of characters in text that were matched. + */ + virtual int32_t matches( UText *text, + int32_t maxLength, + int32_t *lengths, + int &count, + int limit ) const; + + /** + * <p>Return a StringEnumeration for iterating all the words in the dictionary.</p> + * + * @param status A status code recording the success of the call. + * @return A StringEnumeration that will iterate through the whole dictionary. + * The caller is responsible for closing it. The order is unspecified. + */ + virtual StringEnumeration *openWords( UErrorCode &status ) const; + + /** + * <p>Add one word to the dictionary.</p> + * + * @param word A UChar buffer containing the word. + * @param length The length of the word. + * @param status The resultant status + */ + virtual void addWord( const UChar *word, + int32_t length, + UErrorCode &status); + +#if 0 + /** + * <p>Add all strings from a UEnumeration to the dictionary.</p> + * + * @param words A UEnumeration that will return the desired words. + * @param status The resultant status + */ + virtual void addWords( UEnumeration *words, UErrorCode &status ); +#endif + +protected: + /** + * <p>Search the dictionary for matches.</p> + * + * @param text A UText representing the text. The + * iterator is left after the longest prefix match in the dictionary. + * @param maxLength The maximum number of code units to match. + * @param lengths An array that is filled with the lengths of words that matched. + * @param count Filled with the number of elements output in lengths. + * @param limit The size of the lengths array; this limits the number of words output. + * @param parent The parent of the current node + * @param pMatched The returned parent node matched the input + * @return The number of characters in text that were matched. + */ + virtual int32_t search( UText *text, + int32_t maxLength, + int32_t *lengths, + int &count, + int limit, + TernaryNode *&parent, + UBool &pMatched ) const; + +private: + /** + * <p>Private constructor. The root node it not allocated.</p> + * + * @param status A status code recording the success of the call. + */ + MutableTrieDictionary( UErrorCode &status ); +}; + +/******************************************************************* + * CompactTrieDictionary + */ + +/** + * <p>CompactTrieDictionary is a TrieWordDictionary that has been compacted + * to save space.</p> + */ +class U_COMMON_API CompactTrieDictionary : public TrieWordDictionary { + private: + /** + * The root node of the trie + */ + + const CompactTrieHeader *fData; + + /** + * A UBool indicating whether or not we own the fData. + */ + + UBool fOwnData; + + UDataMemory *fUData; + public: + /** + * <p>Construct a dictionary from a UDataMemory.</p> + * + * @param data A pointer to a UDataMemory, which is adopted + * @param status A status code giving the result of the constructor + */ + CompactTrieDictionary(UDataMemory *dataObj, UErrorCode &status); + + /** + * <p>Construct a dictionary from raw saved data.</p> + * + * @param data A pointer to the raw data, which is still owned by the caller + * @param status A status code giving the result of the constructor + */ + CompactTrieDictionary(const void *dataObj, UErrorCode &status); + + /** + * <p>Construct a dictionary from a MutableTrieDictionary.</p> + * + * @param dict The dictionary to use as input. + * @param status A status code recording the success of the call. + */ + CompactTrieDictionary( const MutableTrieDictionary &dict, UErrorCode &status ); + + /** + * <p>Virtual destructor.</p> + */ + virtual ~CompactTrieDictionary(); + + /** + * <p>Find dictionary words that match the text.</p> + * + * @param text A UText representing the text. The + * iterator is left after the longest prefix match in the dictionary. + * @param maxLength The maximum number of code units to match. + * @param lengths An array that is filled with the lengths of words that matched. + * @param count Filled with the number of elements output in lengths. + * @param limit The size of the lengths array; this limits the number of words output. + * @return The number of characters in text that were matched. + */ + virtual int32_t matches( UText *text, + int32_t rangeEnd, + int32_t *lengths, + int &count, + int limit ) const; + + /** + * <p>Return a StringEnumeration for iterating all the words in the dictionary.</p> + * + * @param status A status code recording the success of the call. + * @return A StringEnumeration that will iterate through the whole dictionary. + * The caller is responsible for closing it. The order is unspecified. + */ + virtual StringEnumeration *openWords( UErrorCode &status ) const; + + /** + * <p>Return the size of the compact data.</p> + * + * @return The size of the dictionary's compact data. + */ + virtual uint32_t dataSize() const; + + /** + * <p>Return a void * pointer to the compact data, platform-endian.</p> + * + * @return The data for the compact dictionary, suitable for passing to the + * constructor. + */ + virtual const void *data() const; + + /** + * <p>Return a MutableTrieDictionary clone of this dictionary.</p> + * + * @param status A status code recording the success of the call. + * @return A MutableTrieDictionary with the same data as this dictionary + */ + virtual MutableTrieDictionary *cloneMutable( UErrorCode &status ) const; + + private: + + /** + * <p>Convert a MutableTrieDictionary into a compact data blob.</p> + * + * @param dict The dictionary to convert. + * @param status A status code recording the success of the call. + * @return A single data blob starting with a CompactTrieHeader. + */ + static CompactTrieHeader *compactMutableTrieDictionary( const MutableTrieDictionary &dict, + UErrorCode &status ); + +}; + +U_NAMESPACE_END + + /* TRIEDICT_H */ +#endif |