diff --git a/icu4c/source/layoutex/ParagraphLayout.cpp b/icu4c/source/layoutex/ParagraphLayout.cpp index 322fab0cb9a..26b3680f0c4 100644 --- a/icu4c/source/layoutex/ParagraphLayout.cpp +++ b/icu4c/source/layoutex/ParagraphLayout.cpp @@ -458,7 +458,7 @@ le_int32 ParagraphLayout::getLeading() const return fLeading; } -const ParagraphLayout::Line *ParagraphLayout::nextLine(float width) +ParagraphLayout::Line *ParagraphLayout::nextLine(float width) { if (fLineEnd >= fCharCount) { return NULL; @@ -749,7 +749,7 @@ le_int32 ParagraphLayout::previousBreak(le_int32 charIndex) return fBreakIterator->preceding(charIndex + 1); } -const ParagraphLayout::Line *ParagraphLayout::computeVisualRuns() +ParagraphLayout::Line *ParagraphLayout::computeVisualRuns() { UErrorCode bidiStatus = U_ZERO_ERROR; le_int32 dirRunCount, visualRun; diff --git a/icu4c/source/layoutex/layout/ParagraphLayout.h b/icu4c/source/layoutex/layout/ParagraphLayout.h index 552ce0eaab0..1b85b526fd2 100644 --- a/icu4c/source/layoutex/layout/ParagraphLayout.h +++ b/icu4c/source/layoutex/layout/ParagraphLayout.h @@ -148,6 +148,8 @@ public: VisualRun **fRuns; Line(); + Line(const Line &other); + Line &operator=(const Line &other) { return *this; }; void computeMetrics(); @@ -221,7 +223,7 @@ public: /** * Get the (x, y) positions of the glyphs in the visual run. To simplify storage * management, the x and y positions are stored in a single array with the x positions - * at even offsets in the array and the corresponding y position in the following even offset. + * at even offsets in the array and the corresponding y position in the following odd offset. * There is an extra (x, y) pair at the end of the array which represents the advance of * the final glyph in the run. * @@ -309,6 +311,8 @@ public: friend class Line; VisualRun(); + VisualRun(const VisualRun &other); + VisualRun &operator=(const VisualRun &other) { return *this; }; VisualRun(const LEFontInstance *font, UBiDiDirection direction, le_int32 glyphCount, const LEGlyphID glyphs[], const float positions[], const le_int32 glyphToCharMap[]); @@ -454,13 +458,14 @@ public: * rest of the paragraph will be returned. * * @return a ParagraphLayout::Line object which represents the line. The caller - * is responsible for deleting the object. + * is responsible for deleting the object. Returns NULL if there are no + * more lines in the paragraph. * * @see ParagraphLayout::Line * * @draft ICU 2.6 */ - const Line *nextLine(float width); + Line *nextLine(float width); /** * ICU "poor man's RTTI", returns a UClassID for the actual class. @@ -501,10 +506,12 @@ private: }; ParagraphLayout() {}; + ParagraphLayout(const ParagraphLayout &other) {}; + ParagraphLayout &operator=(const ParagraphLayout &other) { return *this; }; void computeLevels(UBiDiLevel paragraphLevel); - const Line *computeVisualRuns(); + Line *computeVisualRuns(); void appendRun(Line *line, le_int32 run, le_int32 firstChar, le_int32 lastChar); void computeScripts(); @@ -587,6 +594,12 @@ inline ParagraphLayout::Line::Line() // nothing else to do } +inline ParagraphLayout::Line::Line(const Line &other) + : fAscent(0), fDescent(0), fLeading(0), fRunCount(0), fRunCapacity(0), fRuns(NULL) +{ + // nothing else to do +} + inline le_int32 ParagraphLayout::Line::countRuns() const { return fRunCount; @@ -643,6 +656,12 @@ inline ParagraphLayout::VisualRun::VisualRun() // nothing } +inline ParagraphLayout::VisualRun::VisualRun(const VisualRun &other) + : fFont(NULL), fDirection(UBIDI_LTR), fGlyphCount(0), fGlyphs(NULL), fPositions(NULL), fGlyphToCharMap(NULL) +{ + // nothing +} + inline ParagraphLayout::VisualRun::VisualRun(const LEFontInstance *font, UBiDiDirection direction, le_int32 glyphCount, const LEGlyphID glyphs[], const float positions[], const le_int32 glyphToCharMap[]) : fFont(font), fDirection(direction), fGlyphCount(glyphCount), diff --git a/icu4c/source/layoutex/layout/RunArrays.h b/icu4c/source/layoutex/layout/RunArrays.h index 159b3f8f082..8ecffe04363 100644 --- a/icu4c/source/layoutex/layout/RunArrays.h +++ b/icu4c/source/layoutex/layout/RunArrays.h @@ -192,11 +192,27 @@ private: le_int32 ensureCapacity(); + RunArray(); + RunArray(const RunArray &other); + RunArray &operator=(const RunArray &other) { return *this; }; + const le_int32 *fLimits; le_int32 fCount; le_int32 fCapacity; }; +inline RunArray::RunArray() + : fClientArrays(false), fLimits(NULL), fCount(0), fCapacity(0) +{ + // nothing else to do... +} + +inline RunArray::RunArray(const RunArray &other) + : fClientArrays(false), fLimits(NULL), fCount(0), fCapacity(0) +{ + // nothing else to do... +} + inline RunArray::RunArray(const le_int32 *limits, le_int32 count) : fClientArrays(true), fLimits(limits), fCount(count), fCapacity(count) { @@ -339,6 +355,11 @@ protected: virtual void grow(le_int32 capacity); private: + + FontRuns(); + FontRuns(const FontRuns &other); + FontRuns &operator=(const FontRuns &other) { return *this; }; + /** * The address of this static class variable serves as this class's ID * for ICU "poor man's RTTI". @@ -348,6 +369,17 @@ private: const LEFontInstance **fFonts; }; +inline FontRuns::FontRuns() + : RunArray(0), fFonts(NULL) +{ + // nothing else to do... +} + +inline FontRuns::FontRuns(const FontRuns &other) + : RunArray(0), fFonts(NULL) +{ + // nothing else to do... +} inline FontRuns::FontRuns(const LEFontInstance **fonts, const le_int32 *limits, le_int32 count) : RunArray(limits, count), fFonts(fonts) @@ -472,6 +504,11 @@ protected: virtual void grow(le_int32 capacity); private: + + LocaleRuns(); + LocaleRuns(const LocaleRuns &other); + 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". @@ -481,6 +518,17 @@ private: const Locale **fLocales; }; +inline LocaleRuns::LocaleRuns() + : RunArray(0), fLocales(NULL) +{ + // nothing else to do... +} + +inline LocaleRuns::LocaleRuns(const LocaleRuns &other) + : RunArray(0), fLocales(NULL) +{ + // nothing else to do... +} inline LocaleRuns::LocaleRuns(const Locale **locales, const le_int32 *limits, le_int32 count) : RunArray(limits, count), fLocales(locales) @@ -604,6 +652,11 @@ protected: virtual void grow(le_int32 capacity); private: + + ValueRuns(); + ValueRuns(const ValueRuns &other); + ValueRuns &operator=(const ValueRuns &other) { return *this; }; + /** * The address of this static class variable serves as this class's ID * for ICU "poor man's RTTI". @@ -613,6 +666,17 @@ private: const le_int32 *fValues; }; +inline ValueRuns::ValueRuns() + : RunArray(0), fValues(NULL) +{ + // nothing else to do... +} + +inline ValueRuns::ValueRuns(const ValueRuns &other) + : RunArray(0), fValues(NULL) +{ + // nothing else to do... +} inline ValueRuns::ValueRuns(const le_int32 *values, const le_int32 *limits, le_int32 count) : RunArray(limits, count), fValues(values)