| 1 | /* |
| 2 | ********************************************************************** |
| 3 | * Copyright (C) 1999-2000 IBM Corp. All rights reserved. |
| 4 | ********************************************************************** |
| 5 | * Date Name Description |
| 6 | * 12/1/99 rgillam Complete port from Java. |
| 7 | * 01/13/2000 helena Added UErrorCode to ctors. |
| 8 | ********************************************************************** |
| 9 | */ |
| 10 | |
| 11 | #ifndef DBBI_TBL_H |
| 12 | #define DBBI_TBL_H |
| 13 | |
| 14 | #include "unicode/utypes.h" |
| 15 | #include "unicode/uobject.h" |
| 16 | #include "unicode/udata.h" |
| 17 | #include "brkdict.h" |
| 18 | |
| 19 | U_NAMESPACE_BEGIN |
| 20 | |
| 21 | /* forward declaration */ |
| 22 | class DictionaryBasedBreakIterator; |
| 23 | |
| 24 | // |
| 25 | // DictionaryBasedBreakIteratorTables |
| 26 | // |
| 27 | // This class sits between instances of DictionaryBasedBreakIterator |
| 28 | // and the dictionary data itself, which is of type BreakDictionary. |
| 29 | // It provides reference counting, allowing multiple copies of a |
| 30 | // DictionaryBasedBreakIterator to share a single instance of |
| 31 | // BreakDictionary. |
| 32 | // |
| 33 | // TODO: it'd probably be cleaner to add the reference counting to |
| 34 | // BreakDictionary and get rid of this class, but doing it this way |
| 35 | // was a convenient transition from earlier code, and time is short... |
| 36 | // |
| 37 | class DictionaryBasedBreakIteratorTables : public UMemory { |
| 38 | |
| 39 | private: |
| 40 | int32_t fRefCount; |
| 41 | |
| 42 | |
| 43 | public: |
| 44 | //======================================================================= |
| 45 | // constructor |
| 46 | //======================================================================= |
| 47 | /* @param dictionaryFilename The name of the dictionary file |
| 48 | * @param status The error code |
| 49 | * @return the newly created DictionaryBasedBreakIteratorTables |
| 50 | **/ |
| 51 | DictionaryBasedBreakIteratorTables(const char* dictionaryFilename, |
| 52 | UErrorCode& status); |
| 53 | |
| 54 | BreakDictionary *fDictionary; |
| 55 | void addReference(); |
| 56 | void removeReference(); |
| 57 | /** |
| 58 | * Destructor. Should not be used directly. Use removeReference() istead. |
| 59 | * (Not private to avoid compiler warnings.) |
| 60 | */ |
| 61 | virtual ~DictionaryBasedBreakIteratorTables(); |
| 62 | |
| 63 | private: |
| 64 | /** |
| 65 | * The copy constructor is declared private and not implemented. |
| 66 | * THIS CLASS MAY NOT BE COPIED. |
| 67 | * @param that The DictionaryBasedBreakIteratorTables to be copied. |
| 68 | * @return the newly constructed DictionaryBasedBreakIteratorTables. |
| 69 | */ |
| 70 | DictionaryBasedBreakIteratorTables(const DictionaryBasedBreakIteratorTables& that); |
| 71 | |
| 72 | //======================================================================= |
| 73 | // boilerplate |
| 74 | //======================================================================= |
| 75 | |
| 76 | |
| 77 | /** |
| 78 | * The assignment operator is declared private and not implemented. |
| 79 | * THIS CLASS MAY NOT BE COPIED. |
| 80 | * Call addReference() and share an existing copy instead. |
| 81 | * @that The object to be copied |
| 82 | * @return the newly created DictionaryBasedBreakIteratorTables. |
| 83 | */ |
| 84 | DictionaryBasedBreakIteratorTables& operator=( |
| 85 | const DictionaryBasedBreakIteratorTables& that); |
| 86 | }; |
| 87 | |
| 88 | U_NAMESPACE_END |
| 89 | |
| 90 | #endif |