]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/layoutex/layout/RunArrays.h
ICU-62107.0.1.tar.gz
[apple/icu.git] / icuSources / layoutex / layout / RunArrays.h
index f745bd54de10714e1dd9fd16ad3cdd3d28ab1530..5cf6c60b3f3e763a4c651774ae796b7952e758a9 100644 (file)
@@ -1,6 +1,8 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
 /*
  **********************************************************************
- *   Copyright (C) 2003-2004, International Business Machines
+ *   Copyright (C) 2003-2008, International Business Machines
  *   Corporation and others.  All Rights Reserved.
  **********************************************************************
  */
 #include "unicode/utypes.h"
 #include "unicode/locid.h"
 
+/**
+ * \file 
+ * \brief C++ API: base class for building classes which represent data that is associated with runs of text.
+ */
 U_NAMESPACE_BEGIN
 
 /**
  * The initial size of an array if it is unspecified.
  *
- * @draft ICU 2.6
+ * @stable ICU 3.2
  */
 #define INITIAL_CAPACITY 16
 
@@ -28,7 +35,7 @@ U_NAMESPACE_BEGIN
  * When an array needs to grow, it will double in size until
  * it becomes this large, then it will grow by this amount.
  *
- * @draft ICU 2.6
+ * @stable ICU 3.2
  */
 #define CAPACITY_GROW_LIMIT 128
 
@@ -38,7 +45,7 @@ U_NAMESPACE_BEGIN
  * maintains an array of limit indices into the text, subclasses
  * provide one or more arrays of data.
  *
- * @draft ICU 2.6
+ * @stable ICU 3.2
  */
 class U_LAYOUTEX_API RunArray : public UObject
 {
@@ -52,9 +59,9 @@ public:
      *
      * @param count is the number of entries in the limit array.
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
-    RunArray(const le_int32 *limits, le_int32 count);
+    inline RunArray(const le_int32 *limits, le_int32 count);
 
     /**
      * Construct an empty <code>RunArray</code> object. Clients can add limit
@@ -65,14 +72,14 @@ public:
      *
      * @see add
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
     RunArray(le_int32 initialCapacity);
 
     /**
      * The destructor; virtual so that subclass destructors are invoked as well.
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
     virtual ~RunArray();
 
@@ -81,9 +88,19 @@ public:
      *
      * @return the number of entries in the limit indices array.
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
+     */
+    inline le_int32 getCount() const;
+
+    /**
+     * Reset the limit indices array. This method sets the number of entries in the
+     * limit indices array to zero. It does not delete the array.
+     *
+     * Note: Subclass arrays will also be reset and not deleted.
+     *
+     * @stable ICU 3.6
      */
-    le_int32 getCount() const;
+    inline void reset();
 
     /**
      * Get the last limit index. This is the number of characters in
@@ -91,9 +108,9 @@ public:
      *
      * @return the last limit index.
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
-    le_int32 getLimit() const;
+    inline le_int32 getLimit() const;
 
     /**
      * Get the limit index for a particular run of text.
@@ -102,9 +119,9 @@ public:
      *
      * @return the limit index for the run, or -1 if <code>run</code> is out of bounds.
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
-    le_int32 getLimit(le_int32 run) const;
+    inline le_int32 getLimit(le_int32 run) const;
 
     /**
      * Add a limit index to the limit indices array and return the run index
@@ -128,23 +145,23 @@ public:
      * @see init
      * @see grow
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
     le_int32 add(le_int32 limit);
 
     /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
+     * ICU "poor man's RTTI", returns a UClassID for this class.
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
-    virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
+    static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
 
     /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
+     * ICU "poor man's RTTI", returns a UClassID for the actual class.
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
-    static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
+    virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
 
 protected:
     /**
@@ -157,7 +174,7 @@ protected:
      *
      * @see add
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
     virtual void init(le_int32 capacity);
 
@@ -171,7 +188,7 @@ protected:
      *
      * @see add
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
     virtual void grow(le_int32 capacity);
 
@@ -182,7 +199,7 @@ protected:
      * <code>add</code> method won't change the arrays
      * and the destructor won't delete them.
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
     le_bool fClientArrays;
 
@@ -195,9 +212,9 @@ private:
 
     le_int32 ensureCapacity();
 
-    RunArray();
-    RunArray(const RunArray & /*other*/);
-    RunArray &operator=(const RunArray & /*other*/) { return *this; };
+    inline RunArray();
+    inline RunArray(const RunArray & /*other*/);
+    inline RunArray &operator=(const RunArray & /*other*/) { return *this; };
 
     const le_int32 *fLimits;
           le_int32  fCount;
@@ -227,6 +244,11 @@ inline le_int32 RunArray::getCount() const
     return fCount;
 }
 
+inline void RunArray::reset()
+{
+    fCount = 0;
+}
+
 inline le_int32 RunArray::getLimit(le_int32 run) const
 {
     if (run < 0 || run >= fCount) {
@@ -245,7 +267,7 @@ inline le_int32 RunArray::getLimit() const
  * The <code>FontRuns</code> class associates pointers to <code>LEFontInstance</code>
  * objects with runs of text.
  *
- * @draft ICU 2.6
+ * @stable ICU 3.2
  */
 class U_LAYOUTEX_API FontRuns : public RunArray
 {
@@ -263,9 +285,9 @@ public:
      *
      * @param count is the number of entries in the two arrays.
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
-    FontRuns(const LEFontInstance **fonts, const le_int32 *limits, le_int32 count);
+    inline FontRuns(const LEFontInstance **fonts, const le_int32 *limits, le_int32 count);
 
     /**
      * Construct an empty <code>FontRuns</code> object. Clients can add font and limit
@@ -276,14 +298,14 @@ public:
      *
      * @see add
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
     FontRuns(le_int32 initialCapacity);
 
     /**
      * The destructor; virtual so that subclass destructors are invoked as well.
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
     virtual ~FontRuns();
 
@@ -298,7 +320,7 @@ public:
      *
      * @see RunArray::getLimit
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
     const LEFontInstance *getFont(le_int32 run) const;
 
@@ -323,23 +345,23 @@ public:
      *
      * @return the run index where the font and limit index were stored, or -1 if the data cannot be stored.
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
     le_int32 add(const LEFontInstance *font, le_int32 limit);
 
     /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
+     * ICU "poor man's RTTI", returns a UClassID for this class.
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
-    virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
+    static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
 
     /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
+     * ICU "poor man's RTTI", returns a UClassID for the actual class.
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
-    static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
+    virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
 
 protected:
     virtual void init(le_int32 capacity);
@@ -347,9 +369,9 @@ protected:
 
 private:
 
-    FontRuns();
-    FontRuns(const FontRuns &other);
-    FontRuns &operator=(const FontRuns & /*other*/) { return *this; };
+    inline FontRuns();
+    inline FontRuns(const FontRuns &other);
+    inline FontRuns &operator=(const FontRuns & /*other*/) { return *this; };
 
     /**
      * The address of this static class variable serves as this class's ID
@@ -382,7 +404,7 @@ inline FontRuns::FontRuns(const LEFontInstance **fonts, const le_int32 *limits,
  * The <code>LocaleRuns</code> class associates pointers to <code>Locale</code>
  * objects with runs of text.
  *
- * @draft ICU 2.6
+ * @stable ICU 3.2
  */
 class U_LAYOUTEX_API LocaleRuns : public RunArray
 {
@@ -400,9 +422,9 @@ public:
      *
      * @param count is the number of entries in the two arrays.
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
-    LocaleRuns(const Locale **locales, const le_int32 *limits, le_int32 count);
+    inline LocaleRuns(const Locale **locales, const le_int32 *limits, le_int32 count);
 
     /**
      * Construct an empty <code>LocaleRuns</code> object. Clients can add locale and limit
@@ -413,14 +435,14 @@ public:
      *
      * @see add
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
     LocaleRuns(le_int32 initialCapacity);
 
     /**
      * The destructor; virtual so that subclass destructors are invoked as well.
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
     virtual ~LocaleRuns();
 
@@ -435,7 +457,7 @@ public:
      *
      * @see RunArray::getLimit
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
     const Locale *getLocale(le_int32 run) const;
 
@@ -460,41 +482,44 @@ public:
      *
      * @return the run index where the locale and limit index were stored, or -1 if the data cannot be stored.
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
     le_int32 add(const Locale *locale, le_int32 limit);
 
     /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
+     * ICU "poor man's RTTI", returns a UClassID for this class.
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
-    virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
+    static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
 
     /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
+     * ICU "poor man's RTTI", returns a UClassID for the actual class.
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
-    static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
+    virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
 
 protected:
     virtual void init(le_int32 capacity);
     virtual void grow(le_int32 capacity);
 
+    /**
+     * @internal
+     */
+    const Locale **fLocales;
+
 private:
 
-    LocaleRuns();
-    LocaleRuns(const LocaleRuns &other);
-    LocaleRuns &operator=(const LocaleRuns & /*other*/) { return *this; };
+    inline LocaleRuns();
+    inline LocaleRuns(const LocaleRuns &other);
+    inline LocaleRuns &operator=(const LocaleRuns & /*other*/) { return *this; };
 
     /**
      * The address of this static class variable serves as this class's ID
      * for ICU "poor man's RTTI".
      */
     static const char fgClassID;
-
-    const Locale **fLocales;
 };
 
 inline LocaleRuns::LocaleRuns()
@@ -518,7 +543,7 @@ inline LocaleRuns::LocaleRuns(const Locale **locales, const le_int32 *limits, le
 /**
  * The <code>ValueRuns</code> class associates integer values with runs of text.
  *
- * @draft ICU 2.6
+ * @stable ICU 3.2
  */
 class U_LAYOUTEX_API ValueRuns : public RunArray
 {
@@ -535,9 +560,9 @@ public:
      *
      * @param count is the number of entries in the two arrays.
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
-    ValueRuns(const le_int32 *values, const le_int32 *limits, le_int32 count);
+    inline ValueRuns(const le_int32 *values, const le_int32 *limits, le_int32 count);
 
     /**
      * Construct an empty <code>ValueRuns</code> object. Clients can add value and limit
@@ -548,14 +573,14 @@ public:
      *
      * @see add
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
     ValueRuns(le_int32 initialCapacity);
 
     /**
      * The destructor; virtual so that subclass destructors are invoked as well.
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
     virtual ~ValueRuns();
 
@@ -570,7 +595,7 @@ public:
      *
      * @see RunArray::getLimit
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
     le_int32 getValue(le_int32 run) const;
 
@@ -594,23 +619,23 @@ public:
      *
      * @return the run index where the value and limit index were stored, or -1 if the data cannot be stored.
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
     le_int32 add(le_int32 value, le_int32 limit);
 
     /**
-     * ICU "poor man's RTTI", returns a UClassID for the actual class.
+     * ICU "poor man's RTTI", returns a UClassID for this class.
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
-    virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
+    static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
 
     /**
-     * ICU "poor man's RTTI", returns a UClassID for this class.
+     * ICU "poor man's RTTI", returns a UClassID for the actual class.
      *
-     * @draft ICU 2.6
+     * @stable ICU 3.2
      */
-    static inline UClassID getStaticClassID() { return (UClassID)&fgClassID; }
+    virtual inline UClassID getDynamicClassID() const { return getStaticClassID(); }
 
 protected:
     virtual void init(le_int32 capacity);
@@ -618,9 +643,9 @@ protected:
 
 private:
 
-    ValueRuns();
-    ValueRuns(const ValueRuns &other);
-    ValueRuns &operator=(const ValueRuns & /*other*/) { return *this; };
+    inline ValueRuns();
+    inline ValueRuns(const ValueRuns &other);
+    inline ValueRuns &operator=(const ValueRuns & /*other*/) { return *this; };
 
     /**
      * The address of this static class variable serves as this class's ID