]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/common/unicode/rbbi.h
ICU-511.25.tar.gz
[apple/icu.git] / icuSources / common / unicode / rbbi.h
index 90ec6e6bd6acba6138a6442272b9e39fb843b16c..15993781731f1bc3f47d3977dc497e694beef16b 100644 (file)
@@ -1,6 +1,6 @@
 /*
 ***************************************************************************
-*   Copyright (C) 1999-2008 International Business Machines Corporation   *
+*   Copyright (C) 1999-2013 International Business Machines Corporation   *
 *   and others. All rights reserved.                                      *
 ***************************************************************************
 
@@ -170,6 +170,7 @@ protected:
     // constructors
     //=======================================================================
 
+#ifndef U_HIDE_INTERNAL_API
     /**
      * Constant to be used in the constructor
      * RuleBasedBreakIterator(RBBIDataHeader*, EDontAdopt, UErrorCode &);
@@ -203,6 +204,7 @@ protected:
      * @internal
      */
     RuleBasedBreakIterator(const RBBIDataHeader* data, enum EDontAdopt dontAdopt, UErrorCode &status);
+#endif  /* U_HIDE_INTERNAL_API */
 
 
     friend class RBBIRuleBuilder;
@@ -239,6 +241,32 @@ public:
                              UParseError           &parseError,
                              UErrorCode            &status);
 
+    /**
+     * Contruct a RuleBasedBreakIterator from a set of precompiled binary rules.
+     * Binary rules are obtained from RulesBasedBreakIterator::getBinaryRules().
+     * Construction of a break iterator in this way is substantially faster than
+     * constuction from source rules.
+     *
+     * Ownership of the storage containing the compiled rules remains with the
+     * caller of this function.  The compiled rules must not be  modified or 
+     * deleted during the life of the break iterator.
+     *
+     * The compiled rules are not compatible across different major versions of ICU.
+     * The compiled rules are comaptible only between machines with the same
+     * byte ordering (little or big endian) and the same base character set family
+     * (ASCII or EBCDIC).
+     *
+     * @see #getBinaryRules
+     * @param compiledRules A pointer to the compiled break rules to be used.
+     * @param ruleLength The length of the compiled break rules, in bytes.  This
+     *   corresponds to the length value produced by getBinaryRules().
+     * @param status Information on any errors encountered, including invalid
+     *   binary rules.
+     * @stable ICU 4.8
+     */
+    RuleBasedBreakIterator(const uint8_t *compiledRules,
+                           uint32_t       ruleLength,
+                           UErrorCode    &status);
 
     /**
      * This constructor uses the udata interface to create a BreakIterator
@@ -599,10 +627,37 @@ public:
      * @return   A pointer to the binary (compiled) rule data.  The storage
      *           belongs to the RulesBasedBreakIterator object, not the
      *           caller, and must not be modified or deleted.
-     * @internal
+     * @stable ICU 4.8
      */
     virtual const uint8_t *getBinaryRules(uint32_t &length);
 
+    /**
+     *  Set the subject text string upon which the break iterator is operating
+     *  without changing any other aspect of the matching state.
+     *  The new and previous text strings must have the same content.
+     *
+     *  This function is intended for use in environments where ICU is operating on
+     *  strings that may move around in memory.  It provides a mechanism for notifying
+     *  ICU that the string has been relocated, and providing a new UText to access the
+     *  string in its new position.
+     *
+     *  Note that the break iterator implementation never copies the underlying text
+     *  of a string being processed, but always operates directly on the original text
+     *  provided by the user. Refreshing simply drops the references to the old text
+     *  and replaces them with references to the new.
+     *
+     *  Caution:  this function is normally used only by very specialized,
+     *  system-level code.  One example use case is with garbage collection that moves
+     *  the text in memory.
+     *
+     * @param input      The new (moved) text string.
+     * @param status     Receives errors detected by this function.
+     * @return           *this
+     *
+     * @stable ICU 49
+     */
+    virtual RuleBasedBreakIterator &refreshInputText(UText *input, UErrorCode &status);
+
 
 protected:
     //=======================================================================
@@ -639,12 +694,14 @@ protected:
       */
     virtual void setBreakType(int32_t type);
 
+#ifndef U_HIDE_INTERNAL_API
     /**
       * Common initialization function, used by constructors and bufferClone.
       *   (Also used by DictionaryBasedBreakIterator::createBufferClone().)
       * @internal
       */
     void init();
+#endif  /* U_HIDE_INTERNAL_API */
 
 private:
 
@@ -672,6 +729,7 @@ private:
 
 protected:
 
+#ifndef U_HIDE_INTERNAL_API
     /**
      * This is the function that actually implements dictionary-based
      * breaking.  Covering at least the range from startPos to endPos,
@@ -687,6 +745,7 @@ protected:
      * @internal
      */
     int32_t checkDictionary(int32_t startPos, int32_t endPos, UBool reverse);
+#endif  /* U_HIDE_INTERNAL_API */
 
 private: