X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/b75a7d8f3b4adbae880cab104ce2c6a50eee4db2..f3c0d7a59d99c2a94c6b8822291f0e42be3773c9:/icuSources/common/rbbitblb.h diff --git a/icuSources/common/rbbitblb.h b/icuSources/common/rbbitblb.h index 47f7de27..10415018 100644 --- a/icuSources/common/rbbitblb.h +++ b/icuSources/common/rbbitblb.h @@ -1,10 +1,12 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // rbbitblb.h // /* ********************************************************************** -* Copyright (c) 2002, International Business Machines +* Copyright (c) 2002-2016, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** */ @@ -38,21 +40,27 @@ public: ~RBBITableBuilder(); void build(); - int32_t getTableSize(); // Return the runtime size in bytes of + int32_t getTableSize() const; // Return the runtime size in bytes of // the built state table void exportTable(void *where); // fill in the runtime state table. // Sufficient memory must exist at // the specified location. + private: void calcNullable(RBBINode *n); void calcFirstPos(RBBINode *n); void calcLastPos(RBBINode *n); void calcFollowPos(RBBINode *n); + void calcChainedFollowPos(RBBINode *n); + void bofFixup(); void buildStateTable(); void flagAcceptingStates(); void flagLookAheadStates(); void flagTaggedStates(); + void mergeRuleStatusVals(); + + void addRuleRootNodes(UVector *dest, RBBINode *node); // Set functions for UVector. // TODO: make a USet subclass of UVector @@ -60,10 +68,20 @@ private: void setAdd(UVector *dest, UVector *source); UBool setEquals(UVector *a, UVector *b); + void sortedAdd(UVector **dest, int32_t val); + +public: +#ifdef RBBI_DEBUG void printSet(UVector *s); - void printPosSets(RBBINode *n = NULL); + void printPosSets(RBBINode *n /* = NULL*/); void printStates(); - + void printRuleStatusTable(); +#else + #define printSet(s) + #define printPosSets(n) + #define printStates() + #define printRuleStatusTable() +#endif private: RBBIRuleBuilder *fRB; @@ -75,6 +93,7 @@ private: // Index is state number // Contents are RBBIStateDescriptor pointers. + RBBITableBuilder(const RBBITableBuilder &other); // forbid copying of this class RBBITableBuilder &operator=(const RBBITableBuilder &other); // forbid copying of this class }; @@ -87,7 +106,8 @@ public: UBool fMarked; int32_t fAccepting; int32_t fLookAhead; - int32_t fTagVal; + UVector *fTagVals; + int32_t fTagsIdx; UVector *fPositions; // Set of parse tree positions associated // with this state. Unordered (it's a set). // UVector contents are RBBINode *