]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/layout/ThaiLayoutEngine.cpp
ICU-6.2.10.tar.gz
[apple/icu.git] / icuSources / layout / ThaiLayoutEngine.cpp
index 9b808fd1ee5a104b6adf00f9e5318f1fe8378bb7..ee7504e8b3f98e9855c82b9796fcbb5fa703fdae 100644 (file)
@@ -1,8 +1,7 @@
 
 /*
- * @(#)ThaiLayoutEngine.cpp    1.2 00/03/15
  *
- * (C) Copyright IBM Corp. 1998-2003 - All Rights Reserved
+ * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
  *
  */
 
 #include "LayoutEngine.h"
 #include "ThaiLayoutEngine.h"
 #include "ScriptAndLanguageTags.h"
+#include "LEGlyphStorage.h"
 
 #include "ThaiShaping.h"
 
 U_NAMESPACE_BEGIN
 
-const char ThaiLayoutEngine::fgClassID=0;
+UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ThaiLayoutEngine)
 
 ThaiLayoutEngine::ThaiLayoutEngine(const LEFontInstance *fontInstance, le_int32 scriptCode, le_int32 languageCode)
     : LayoutEngine(fontInstance, scriptCode, languageCode)
@@ -51,7 +51,7 @@ ThaiLayoutEngine::~ThaiLayoutEngine()
 // Output: glyphs, char indices
 // Returns: the glyph count
 // NOTE: this assumes that ThaiShaping::compose will allocate the outChars array...
-le_int32 ThaiLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool /*rightToLeft*/, LEGlyphID *&glyphs, le_int32 *&charIndices, LEErrorCode &success)
+le_int32 ThaiLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offset, le_int32 count, le_int32 max, le_bool /*rightToLeft*/, LEGlyphStorage &glyphStorage, LEErrorCode &success)
 {
     if (LE_FAILURE(success)) {
         return 0;
@@ -74,19 +74,20 @@ le_int32 ThaiLayoutEngine::computeGlyphs(const LEUnicode chars[], le_int32 offse
         return 0;
     }
 
-    charIndices = LE_NEW_ARRAY(le_int32, count * 2);
+    glyphStorage.allocateGlyphArray(count * 2, FALSE, success);
 
-    if (charIndices == NULL) {
+    if (LE_FAILURE(success)) {
         LE_DELETE_ARRAY(outChars);
         success = LE_MEMORY_ALLOCATION_ERROR;
         return 0;
     }
 
-    glyphCount = ThaiShaping::compose(chars, offset, count, fGlyphSet, fErrorChar, outChars, charIndices);
-    mapCharsToGlyphs(outChars, 0, glyphCount, false, false, glyphs, charIndices, success);
+    glyphCount = ThaiShaping::compose(chars, offset, count, fGlyphSet, fErrorChar, outChars, glyphStorage);
+    mapCharsToGlyphs(outChars, 0, glyphCount, FALSE, FALSE, glyphStorage, success);
 
     LE_DELETE_ARRAY(outChars);
 
+    glyphStorage.adoptGlyphCount(glyphCount);
     return glyphCount;
 }