fontservices/textshaperplugin/IcuSource/common/rbbinode.h
changeset 0 1fb32624e06b
equal deleted inserted replaced
-1:000000000000 0:1fb32624e06b
       
     1 /********************************************************************
       
     2  * COPYRIGHT:
       
     3  * Copyright (c) 2001-2003, International Business Machines Corporation and
       
     4  * others. All Rights Reserved.
       
     5  ********************************************************************/
       
     6 
       
     7 #ifndef RBBINODE_H
       
     8 #define RBBINODE_H
       
     9 
       
    10 #include "unicode/utypes.h"
       
    11 #include "unicode/uobject.h"
       
    12 
       
    13 //
       
    14 //  class RBBINode
       
    15 //
       
    16 //                    Represents a node in the parse tree generated when reading
       
    17 //                    a rule file.
       
    18 //
       
    19 
       
    20 U_NAMESPACE_BEGIN
       
    21 
       
    22 class    UnicodeSet;
       
    23 class    UVector;
       
    24 
       
    25 class RBBINode : public UMemory {
       
    26     public:
       
    27         enum NodeType {
       
    28             setRef,
       
    29             uset,
       
    30             varRef,
       
    31             leafChar,
       
    32             lookAhead,
       
    33             tag,
       
    34             endMark,
       
    35             opStart,
       
    36             opCat,
       
    37             opOr,
       
    38             opStar,
       
    39             opPlus,
       
    40             opQuestion,
       
    41             opBreak,
       
    42             opReverse,
       
    43             opLParen
       
    44         };
       
    45 
       
    46         enum OpPrecedence {      
       
    47             precZero,
       
    48             precStart,
       
    49             precLParen,
       
    50             precOpOr,
       
    51             precOpCat
       
    52         };
       
    53             
       
    54         NodeType      fType;
       
    55         RBBINode      *fParent;
       
    56         RBBINode      *fLeftChild;
       
    57         RBBINode      *fRightChild;
       
    58         UnicodeSet    *fInputSet;           // For uset nodes only.
       
    59         OpPrecedence  fPrecedence;          // For binary ops only.
       
    60         
       
    61         UnicodeString fText;                // Text corresponding to this node.
       
    62                                             //   May be lazily evaluated when (if) needed
       
    63                                             //   for some node types.
       
    64         int           fFirstPos;            // Position in the rule source string of the
       
    65                                             //   first text associated with the node.
       
    66                                             //   If there's a left child, this will be the same
       
    67                                             //   as that child's left pos.
       
    68         int           fLastPos;             //  Last position in the rule source string
       
    69                                             //    of any text associated with this node.
       
    70                                             //    If there's a right child, this will be the same
       
    71                                             //    as that child's last postion.
       
    72 
       
    73         UBool         fNullable;            // See Aho.
       
    74         int32_t       fVal;                 // For leafChar nodes, the value.
       
    75                                             //   Values are the character category,
       
    76                                             //   corresponds to columns in the final
       
    77                                             //   state transition table.
       
    78 
       
    79         UBool         fLookAheadEnd;        // For endMark nodes, set TRUE if
       
    80                                             //   marking the end of a look-ahead rule.
       
    81 
       
    82         UVector       *fFirstPosSet;
       
    83         UVector       *fLastPosSet;         // TODO: rename fFirstPos & fLastPos to avoid confusion.
       
    84         UVector       *fFollowPos;
       
    85 
       
    86 
       
    87         RBBINode(NodeType t);
       
    88         RBBINode(const RBBINode &other);
       
    89         ~RBBINode();
       
    90         
       
    91         RBBINode    *cloneTree();
       
    92         RBBINode    *flattenVariables();
       
    93         void         flattenSets();
       
    94         void         findNodes(UVector *dest, RBBINode::NodeType kind, UErrorCode &status);
       
    95 
       
    96 #ifdef RBBI_DEBUG
       
    97         void        printNode();
       
    98         void        printTree(UBool withHeading);
       
    99 #else
       
   100         // Do-nothing inline functions for non-debug builds.  Can't make empty defines for member
       
   101         //   functions - they won't compile at the call sites.
       
   102         int         fakeField;
       
   103         #define printNode() fakeField=0;
       
   104         #define printTree(withHeading) fakeField=0;
       
   105 #endif
       
   106 
       
   107     private:
       
   108         RBBINode &operator = (const RBBINode &other); // No defs.
       
   109         UBool operator == (const RBBINode &other);    // Private, so these functions won't accidently be used.
       
   110 
       
   111         int           fSerialNum;           //  Debugging aids.
       
   112         static int    gLastSerial;
       
   113 };
       
   114 
       
   115 #ifdef RBBI_DEBUG
       
   116 U_CFUNC void 
       
   117 RBBI_DEBUG_printUnicodeString(const UnicodeString &s, int minWidth=0);
       
   118 #endif
       
   119 
       
   120 U_NAMESPACE_END
       
   121 
       
   122 #endif
       
   123