*/
// Forward declaration.
+/// \cond
struct UHashtable;
typedef struct UHashtable UHashtable;
+/// \endcond
/**
* Build options for BytesTrieBuilder and CharsTrieBuilder.
public:
#ifndef U_HIDE_INTERNAL_API
/** @internal */
- static UBool hashNode(const void *node);
+ static int32_t hashNode(const void *node);
/** @internal */
static UBool equalNodes(const void *left, const void *right);
#endif /* U_HIDE_INTERNAL_API */
// Do not conditionalize the following with #ifndef U_HIDE_INTERNAL_API,
// it is needed for layout of other objects.
- /** @internal */
+ /**
+ * @internal
+ * \cond
+ */
class Node : public UObject {
public:
Node(int32_t initialHash) : hash(initialHash), offset(0) {}
/** @internal */
class FinalValueNode : public Node {
public:
- FinalValueNode(int32_t v) : Node(0x111111*37+v), value(v) {}
+ FinalValueNode(int32_t v) : Node(0x111111u*37u+v), value(v) {}
virtual UBool operator==(const Node &other) const;
virtual void write(StringTrieBuilder &builder);
protected:
void setValue(int32_t v) {
hasValue=TRUE;
value=v;
- hash=hash*37+v;
+ hash=hash*37u+v;
}
protected:
UBool hasValue;
class IntermediateValueNode : public ValueNode {
public:
IntermediateValueNode(int32_t v, Node *nextNode)
- : ValueNode(0x222222*37+hashCode(nextNode)), next(nextNode) { setValue(v); }
+ : ValueNode(0x222222u*37u+hashCode(nextNode)), next(nextNode) { setValue(v); }
virtual UBool operator==(const Node &other) const;
virtual int32_t markRightEdgesFirst(int32_t edgeNumber);
virtual void write(StringTrieBuilder &builder);
class LinearMatchNode : public ValueNode {
public:
LinearMatchNode(int32_t len, Node *nextNode)
- : ValueNode((0x333333*37+len)*37+hashCode(nextNode)),
+ : ValueNode((0x333333u*37u+len)*37u+hashCode(nextNode)),
length(len), next(nextNode) {}
virtual UBool operator==(const Node &other) const;
virtual int32_t markRightEdgesFirst(int32_t edgeNumber);
equal[length]=NULL;
values[length]=value;
++length;
- hash=(hash*37+c)*37+value;
+ hash=(hash*37u+c)*37u+value;
}
// Adds a unit which leads to another match node.
void add(int32_t c, Node *node) {
equal[length]=node;
values[length]=0;
++length;
- hash=(hash*37+c)*37+hashCode(node);
+ hash=(hash*37u+c)*37u+hashCode(node);
}
protected:
Node *equal[kMaxBranchLinearSubNodeLength]; // NULL means "has final value".
class SplitBranchNode : public BranchNode {
public:
SplitBranchNode(char16_t middleUnit, Node *lessThanNode, Node *greaterOrEqualNode)
- : BranchNode(((0x555555*37+middleUnit)*37+
- hashCode(lessThanNode))*37+hashCode(greaterOrEqualNode)),
+ : BranchNode(((0x555555u*37u+middleUnit)*37u+
+ hashCode(lessThanNode))*37u+hashCode(greaterOrEqualNode)),
unit(middleUnit), lessThan(lessThanNode), greaterOrEqual(greaterOrEqualNode) {}
virtual UBool operator==(const Node &other) const;
virtual int32_t markRightEdgesFirst(int32_t edgeNumber);
class BranchHeadNode : public ValueNode {
public:
BranchHeadNode(int32_t len, Node *subNode)
- : ValueNode((0x666666*37+len)*37+hashCode(subNode)),
+ : ValueNode((0x666666u*37u+len)*37u+hashCode(subNode)),
length(len), next(subNode) {}
virtual UBool operator==(const Node &other) const;
virtual int32_t markRightEdgesFirst(int32_t edgeNumber);
int32_t length;
Node *next; // A branch sub-node.
};
+
#endif /* U_HIDE_INTERNAL_API */
+ /// \endcond
/** @internal */
virtual Node *createLinearMatchNode(int32_t i, int32_t unitIndex, int32_t length,