| OLD | NEW |
| 1 /* | 1 /* |
| 2 ******************************************************************************* | 2 ******************************************************************************* |
| 3 * Copyright (C) 2010-2012, International Business Machines | 3 * Copyright (C) 2010-2012,2014, International Business Machines |
| 4 * Corporation and others. All Rights Reserved. | 4 * Corporation and others. All Rights Reserved. |
| 5 ******************************************************************************* | 5 ******************************************************************************* |
| 6 * file name: stringtriebuilder.h | 6 * file name: stringtriebuilder.h |
| 7 * encoding: US-ASCII | 7 * encoding: US-ASCII |
| 8 * tab size: 8 (not used) | 8 * tab size: 8 (not used) |
| 9 * indentation:4 | 9 * indentation:4 |
| 10 * | 10 * |
| 11 * created on: 2010dec24 | 11 * created on: 2010dec24 |
| 12 * created by: Markus W. Scherer | 12 * created by: Markus W. Scherer |
| 13 */ | 13 */ |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 155 * Makes sure that there is only one unique FinalValueNode registered | 155 * Makes sure that there is only one unique FinalValueNode registered |
| 156 * with this value. | 156 * with this value. |
| 157 * Avoids creating a node if the value is a duplicate. | 157 * Avoids creating a node if the value is a duplicate. |
| 158 * @param value A final value. | 158 * @param value A final value. |
| 159 * @param errorCode ICU in/out UErrorCode. | 159 * @param errorCode ICU in/out UErrorCode. |
| 160 Set to U_MEMORY_ALLOCATION_ERROR if it was success but n
ewNode==NULL. | 160 Set to U_MEMORY_ALLOCATION_ERROR if it was success but n
ewNode==NULL. |
| 161 * @return A FinalValueNode with the given value. | 161 * @return A FinalValueNode with the given value. |
| 162 * @internal | 162 * @internal |
| 163 */ | 163 */ |
| 164 Node *registerFinalValue(int32_t value, UErrorCode &errorCode); | 164 Node *registerFinalValue(int32_t value, UErrorCode &errorCode); |
| 165 #endif /* U_HIDE_INTERNAL_API */ |
| 165 | 166 |
| 166 /* | 167 /* |
| 167 * C++ note: | 168 * C++ note: |
| 168 * registerNode() and registerFinalValue() take ownership of their input nod
es, | 169 * registerNode() and registerFinalValue() take ownership of their input nod
es, |
| 169 * and only return owned nodes. | 170 * and only return owned nodes. |
| 170 * If they see a failure UErrorCode, they will delete the input node. | 171 * If they see a failure UErrorCode, they will delete the input node. |
| 171 * If they get a NULL pointer, they will record a U_MEMORY_ALLOCATION_ERROR. | 172 * If they get a NULL pointer, they will record a U_MEMORY_ALLOCATION_ERROR. |
| 172 * If there is a failure, they return NULL. | 173 * If there is a failure, they return NULL. |
| 173 * | 174 * |
| 174 * NULL Node pointers can be safely passed into other Nodes because | 175 * NULL Node pointers can be safely passed into other Nodes because |
| 175 * they call the static Node::hashCode() which checks for a NULL pointer fir
st. | 176 * they call the static Node::hashCode() which checks for a NULL pointer fir
st. |
| 176 * | 177 * |
| 177 * Therefore, as long as builder functions register a new node, | 178 * Therefore, as long as builder functions register a new node, |
| 178 * they need to check for failures only before explicitly dereferencing | 179 * they need to check for failures only before explicitly dereferencing |
| 179 * a Node pointer, or before setting a new UErrorCode. | 180 * a Node pointer, or before setting a new UErrorCode. |
| 180 */ | 181 */ |
| 181 | 182 |
| 182 // Hash set of nodes, maps from nodes to integer 1. | 183 // Hash set of nodes, maps from nodes to integer 1. |
| 183 /** @internal */ | 184 /** @internal */ |
| 184 UHashtable *nodes; | 185 UHashtable *nodes; |
| 185 | 186 |
| 187 #ifndef U_HIDE_INTERNAL_API |
| 186 /** @internal */ | 188 /** @internal */ |
| 187 class Node : public UObject { | 189 class Node : public UObject { |
| 188 public: | 190 public: |
| 189 Node(int32_t initialHash) : hash(initialHash), offset(0) {} | 191 Node(int32_t initialHash) : hash(initialHash), offset(0) {} |
| 190 inline int32_t hashCode() const { return hash; } | 192 inline int32_t hashCode() const { return hash; } |
| 191 // Handles node==NULL. | 193 // Handles node==NULL. |
| 192 static inline int32_t hashCode(const Node *node) { return node==NULL ? 0
: node->hashCode(); } | 194 static inline int32_t hashCode(const Node *node) { return node==NULL ? 0
: node->hashCode(); } |
| 193 // Base class operator==() compares the actual class types. | 195 // Base class operator==() compares the actual class types. |
| 194 virtual UBool operator==(const Node &other) const; | 196 virtual UBool operator==(const Node &other) const; |
| 195 inline UBool operator!=(const Node &other) const { return !operator==(ot
her); } | 197 inline UBool operator!=(const Node &other) const { return !operator==(ot
her); } |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 391 virtual int32_t writeValueAndFinal(int32_t i, UBool isFinal) = 0; | 393 virtual int32_t writeValueAndFinal(int32_t i, UBool isFinal) = 0; |
| 392 /** @internal */ | 394 /** @internal */ |
| 393 virtual int32_t writeValueAndType(UBool hasValue, int32_t value, int32_t nod
e) = 0; | 395 virtual int32_t writeValueAndType(UBool hasValue, int32_t value, int32_t nod
e) = 0; |
| 394 /** @internal */ | 396 /** @internal */ |
| 395 virtual int32_t writeDeltaTo(int32_t jumpTarget) = 0; | 397 virtual int32_t writeDeltaTo(int32_t jumpTarget) = 0; |
| 396 }; | 398 }; |
| 397 | 399 |
| 398 U_NAMESPACE_END | 400 U_NAMESPACE_END |
| 399 | 401 |
| 400 #endif // __STRINGTRIEBUILDER_H__ | 402 #endif // __STRINGTRIEBUILDER_H__ |
| OLD | NEW |