18393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius/* 28393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius * 38393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius * (C) Copyright IBM Corp. and others 1998-2013 - All Rights Reserved 48393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius * 58393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius */ 68393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 78393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius#include "LETypes.h" 88393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius#include "MorphTables.h" 98393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius#include "StateTables.h" 108393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius#include "MorphStateTables.h" 118393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius#include "SubtableProcessor2.h" 128393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius#include "StateTableProcessor2.h" 138393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius#include "IndicRearrangementProcessor2.h" 148393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius#include "LEGlyphStorage.h" 158393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius#include "LESwaps.h" 168393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 178393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig CorneliusU_NAMESPACE_BEGIN 188393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 198393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig CorneliusUOBJECT_DEFINE_RTTI_IMPLEMENTATION(IndicRearrangementProcessor2) 208393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 218393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig CorneliusIndicRearrangementProcessor2::IndicRearrangementProcessor2(const MorphSubtableHeader2 *morphSubtableHeader) 228393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius : StateTableProcessor2(morphSubtableHeader) 238393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius{ 248393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius indicRearrangementSubtableHeader = (const IndicRearrangementSubtableHeader2 *) morphSubtableHeader; 258393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius entryTable = (const IndicRearrangementStateEntry2 *) ((char *) &stateTableHeader->stHeader + entryTableOffset); 268393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 278393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 288393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig CorneliusIndicRearrangementProcessor2::~IndicRearrangementProcessor2() 298393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius{ 308393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 318393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 328393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid IndicRearrangementProcessor2::beginStateTable() 338393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius{ 348393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius firstGlyph = 0; 358393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius lastGlyph = 0; 368393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 378393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 388393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusle_uint16 IndicRearrangementProcessor2::processStateEntry(LEGlyphStorage &glyphStorage, le_int32 &currGlyph, EntryTableIndex2 index) 398393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius{ 408393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius const IndicRearrangementStateEntry2 *entry = &entryTable[index]; 418393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius le_uint16 newState = SWAPW(entry->newStateIndex); // index to the new state 428393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius IndicRearrangementFlags flags = (IndicRearrangementFlags) SWAPW(entry->flags); 438393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 448393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (flags & irfMarkFirst) { 458393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius firstGlyph = currGlyph; 468393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 478393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 488393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (flags & irfMarkLast) { 498393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius lastGlyph = currGlyph; 508393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 518393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 528393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius doRearrangementAction(glyphStorage, (IndicRearrangementVerb) (flags & irfVerbMask)); 538393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 548393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius if (!(flags & irfDontAdvance)) { 558393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius currGlyph += dir; 568393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 578393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 588393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius return newState; // index to new state 598393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 608393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 618393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid IndicRearrangementProcessor2::endStateTable() 628393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius{ 638393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 648393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 658393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliusvoid IndicRearrangementProcessor2::doRearrangementAction(LEGlyphStorage &glyphStorage, IndicRearrangementVerb verb) const 668393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius{ 678393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius LEGlyphID a, b, c, d; 688393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius le_int32 ia, ib, ic, id, ix, x; 698393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius LEErrorCode success = LE_NO_ERROR; 708393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 718393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius switch(verb) 728393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius { 738393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius case irvNoAction: 748393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius break; 758393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 768393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius case irvxA: 778393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius a = glyphStorage[firstGlyph]; 788393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ia = glyphStorage.getCharIndex(firstGlyph, success); 798393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius x = firstGlyph + 1; 808393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 818393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius while (x <= lastGlyph) { 828393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[x - 1] = glyphStorage[x]; 838393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ix = glyphStorage.getCharIndex(x, success); 848393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(x - 1, ix, success); 858393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius x += 1; 868393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 878393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 888393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[lastGlyph] = a; 898393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(lastGlyph, ia, success); 908393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius break; 918393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 928393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius case irvDx: 938393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius d = glyphStorage[lastGlyph]; 948393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius id = glyphStorage.getCharIndex(lastGlyph, success); 958393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius x = lastGlyph - 1; 968393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 978393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius while (x >= firstGlyph) { 988393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[x + 1] = glyphStorage[x]; 998393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ix = glyphStorage.getCharIndex(x, success); 1008393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(x + 1, ix, success); 1018393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius x -= 1; 1028393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 1038393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1048393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[firstGlyph] = d; 1058393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(firstGlyph, id, success); 1068393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius break; 1078393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1088393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius case irvDxA: 1098393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius a = glyphStorage[firstGlyph]; 1108393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ia = glyphStorage.getCharIndex(firstGlyph, success); 1118393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius id = glyphStorage.getCharIndex(lastGlyph, success); 1128393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1138393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[firstGlyph] = glyphStorage[lastGlyph]; 1148393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[lastGlyph] = a; 1158393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1168393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(firstGlyph, id, success); 1178393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(lastGlyph, ia, success); 1188393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius break; 1198393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1208393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius case irvxAB: 1218393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius a = glyphStorage[firstGlyph]; 1228393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius b = glyphStorage[firstGlyph + 1]; 1238393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ia = glyphStorage.getCharIndex(firstGlyph, success); 1248393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ib = glyphStorage.getCharIndex(firstGlyph + 1, success); 1258393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius x = firstGlyph + 2; 1268393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1278393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius while (x <= lastGlyph) { 1288393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[x - 2] = glyphStorage[x]; 1298393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ix = glyphStorage.getCharIndex(x, success); 1308393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(x - 2, ix, success); 1318393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius x += 1; 1328393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 1338393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1348393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[lastGlyph - 1] = a; 1358393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[lastGlyph] = b; 1368393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1378393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(lastGlyph - 1, ia, success); 1388393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(lastGlyph, ib, success); 1398393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius break; 1408393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1418393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius case irvxBA: 1428393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius a = glyphStorage[firstGlyph]; 1438393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius b = glyphStorage[firstGlyph + 1]; 1448393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ia = glyphStorage.getCharIndex(firstGlyph, success); 1458393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ib = glyphStorage.getCharIndex(firstGlyph + 1, success); 1468393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius x = firstGlyph + 2; 1478393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1488393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius while (x <= lastGlyph) { 1498393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[x - 2] = glyphStorage[x]; 1508393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ix = glyphStorage.getCharIndex(x, success); 1518393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(x - 2, ix, success); 1528393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius x += 1; 1538393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 1548393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1558393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[lastGlyph - 1] = b; 1568393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[lastGlyph] = a; 1578393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1588393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(lastGlyph - 1, ib, success); 1598393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(lastGlyph, ia, success); 1608393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius break; 1618393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1628393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius case irvCDx: 1638393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius c = glyphStorage[lastGlyph - 1]; 1648393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius d = glyphStorage[lastGlyph]; 1658393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ic = glyphStorage.getCharIndex(lastGlyph - 1, success); 1668393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius id = glyphStorage.getCharIndex(lastGlyph, success); 1678393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius x = lastGlyph - 2; 1688393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1698393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius while (x >= firstGlyph) { 1708393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[x + 2] = glyphStorage[x]; 1718393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ix = glyphStorage.getCharIndex(x, success); 1728393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(x + 2, ix, success); 1738393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius x -= 1; 1748393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 1758393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1768393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[firstGlyph] = c; 1778393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[firstGlyph + 1] = d; 1788393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1798393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(firstGlyph, ic, success); 1808393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(firstGlyph + 1, id, success); 1818393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius break; 1828393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1838393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius case irvDCx: 1848393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius c = glyphStorage[lastGlyph - 1]; 1858393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius d = glyphStorage[lastGlyph]; 1868393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ic = glyphStorage.getCharIndex(lastGlyph - 1, success); 1878393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius id = glyphStorage.getCharIndex(lastGlyph, success); 1888393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius x = lastGlyph - 2; 1898393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1908393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius while (x >= firstGlyph) { 1918393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[x + 2] = glyphStorage[x]; 1928393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ix = glyphStorage.getCharIndex(x, success); 1938393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(x + 2, ix, success); 1948393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius x -= 1; 1958393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 1968393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 1978393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[firstGlyph] = d; 1988393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[firstGlyph + 1] = c; 1998393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2008393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(firstGlyph, id, success); 2018393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(firstGlyph + 1, ic, success); 2028393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius break; 2038393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2048393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius case irvCDxA: 2058393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius a = glyphStorage[firstGlyph]; 2068393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius c = glyphStorage[lastGlyph - 1]; 2078393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius d = glyphStorage[lastGlyph]; 2088393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ia = glyphStorage.getCharIndex(firstGlyph, success); 2098393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ic = glyphStorage.getCharIndex(lastGlyph - 1, success); 2108393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius id = glyphStorage.getCharIndex(lastGlyph, success); 2118393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius x = lastGlyph - 2; 2128393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2138393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius while (x > firstGlyph) { 2148393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[x + 1] = glyphStorage[x]; 2158393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ix = glyphStorage.getCharIndex(x, success); 2168393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(x + 1, ix, success); 2178393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius x -= 1; 2188393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 2198393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2208393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[firstGlyph] = c; 2218393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[firstGlyph + 1] = d; 2228393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[lastGlyph] = a; 2238393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2248393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(firstGlyph, ic, success); 2258393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(firstGlyph + 1, id, success); 2268393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(lastGlyph, ia, success); 2278393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius break; 2288393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2298393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius case irvDCxA: 2308393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius a = glyphStorage[firstGlyph]; 2318393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius c = glyphStorage[lastGlyph - 1]; 2328393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius d = glyphStorage[lastGlyph]; 2338393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ia = glyphStorage.getCharIndex(firstGlyph, success); 2348393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ic = glyphStorage.getCharIndex(lastGlyph - 1, success); 2358393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius id = glyphStorage.getCharIndex(lastGlyph, success); 2368393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius x = lastGlyph - 2; 2378393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2388393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius while (x > firstGlyph) { 2398393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[x + 1] = glyphStorage[x]; 2408393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ix = glyphStorage.getCharIndex(x, success); 2418393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(x + 1, ix, success); 2428393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius x -= 1; 2438393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 2448393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2458393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[firstGlyph] = d; 2468393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[firstGlyph + 1] = c; 2478393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[lastGlyph] = a; 2488393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2498393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(firstGlyph, id, success); 2508393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(firstGlyph + 1, ic, success); 2518393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(lastGlyph, ia, success); 2528393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius break; 2538393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2548393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius case irvDxAB: 2558393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius a = glyphStorage[firstGlyph]; 2568393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius b = glyphStorage[firstGlyph + 1]; 2578393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius d = glyphStorage[lastGlyph]; 2588393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ia = glyphStorage.getCharIndex(firstGlyph, success); 2598393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ib = glyphStorage.getCharIndex(firstGlyph + 1, success); 2608393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius id = glyphStorage.getCharIndex(lastGlyph, success); 2618393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius x = firstGlyph + 2; 2628393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2638393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius while (x < lastGlyph) { 2648393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[x - 2] = glyphStorage[x]; 2658393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ix = glyphStorage.getCharIndex(x, success); 2668393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(x - 2, ix, success); 2678393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius x += 1; 2688393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 2698393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2708393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[firstGlyph] = d; 2718393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[lastGlyph - 1] = a; 2728393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[lastGlyph] = b; 2738393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2748393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(firstGlyph, id, success); 2758393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(lastGlyph - 1, ia, success); 2768393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(lastGlyph, ib, success); 2778393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius break; 2788393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2798393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius case irvDxBA: 2808393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius a = glyphStorage[firstGlyph]; 2818393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius b = glyphStorage[firstGlyph + 1]; 2828393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius d = glyphStorage[lastGlyph]; 2838393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ia = glyphStorage.getCharIndex(firstGlyph, success); 2848393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ib = glyphStorage.getCharIndex(firstGlyph + 1, success); 2858393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius id = glyphStorage.getCharIndex(lastGlyph, success); 2868393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius x = firstGlyph + 2; 2878393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2888393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius while (x < lastGlyph) { 2898393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[x - 2] = glyphStorage[x]; 2908393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ix = glyphStorage.getCharIndex(x, success); 2918393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(x - 2, ix, success); 2928393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius x += 1; 2938393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 2948393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2958393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[firstGlyph] = d; 2968393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[lastGlyph - 1] = b; 2978393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[lastGlyph] = a; 2988393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 2998393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(firstGlyph, id, success); 3008393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(lastGlyph - 1, ib, success); 3018393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(lastGlyph, ia, success); 3028393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius break; 3038393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3048393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius case irvCDxAB: 3058393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius a = glyphStorage[firstGlyph]; 3068393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius b = glyphStorage[firstGlyph + 1]; 3078393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3088393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[firstGlyph] = glyphStorage[lastGlyph - 1]; 3098393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[firstGlyph + 1] = glyphStorage[lastGlyph]; 3108393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3118393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[lastGlyph - 1] = a; 3128393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[lastGlyph] = b; 3138393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3148393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ia = glyphStorage.getCharIndex(firstGlyph, success); 3158393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ib = glyphStorage.getCharIndex(firstGlyph + 1, success); 3168393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ic = glyphStorage.getCharIndex(lastGlyph - 1, success); 3178393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius id = glyphStorage.getCharIndex(lastGlyph, success); 3188393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3198393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(firstGlyph, ic, success); 3208393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(firstGlyph + 1, id, success); 3218393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3228393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(lastGlyph - 1, ia, success); 3238393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(lastGlyph, ib, success); 3248393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius break; 3258393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3268393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius case irvCDxBA: 3278393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius a = glyphStorage[firstGlyph]; 3288393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius b = glyphStorage[firstGlyph + 1]; 3298393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3308393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[firstGlyph] = glyphStorage[lastGlyph - 1]; 3318393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[firstGlyph + 1] = glyphStorage[lastGlyph]; 3328393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3338393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[lastGlyph - 1] = b; 3348393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[lastGlyph] = a; 3358393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3368393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ia = glyphStorage.getCharIndex(firstGlyph, success); 3378393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ib = glyphStorage.getCharIndex(firstGlyph + 1, success); 3388393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ic = glyphStorage.getCharIndex(lastGlyph - 1, success); 3398393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius id = glyphStorage.getCharIndex(lastGlyph, success); 3408393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3418393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(firstGlyph, ic, success); 3428393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(firstGlyph + 1, id, success); 3438393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3448393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(lastGlyph - 1, ib, success); 3458393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(lastGlyph, ia, success); 3468393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius break; 3478393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3488393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius case irvDCxAB: 3498393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius a = glyphStorage[firstGlyph]; 3508393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius b = glyphStorage[firstGlyph + 1]; 3518393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3528393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[firstGlyph] = glyphStorage[lastGlyph]; 3538393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[firstGlyph + 1] = glyphStorage[lastGlyph - 1]; 3548393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3558393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[lastGlyph - 1] = a; 3568393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[lastGlyph] = b; 3578393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3588393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ia = glyphStorage.getCharIndex(firstGlyph, success); 3598393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ib = glyphStorage.getCharIndex(firstGlyph + 1, success); 3608393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ic = glyphStorage.getCharIndex(lastGlyph - 1, success); 3618393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius id = glyphStorage.getCharIndex(lastGlyph, success); 3628393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3638393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(firstGlyph, id, success); 3648393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(firstGlyph + 1, ic, success); 3658393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3668393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(lastGlyph - 1, ia, success); 3678393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(lastGlyph, ib, success); 3688393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius break; 3698393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3708393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius case irvDCxBA: 3718393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius a = glyphStorage[firstGlyph]; 3728393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius b = glyphStorage[firstGlyph + 1]; 3738393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3748393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[firstGlyph] = glyphStorage[lastGlyph]; 3758393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[firstGlyph + 1] = glyphStorage[lastGlyph - 1]; 3768393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3778393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[lastGlyph - 1] = b; 3788393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage[lastGlyph] = a; 3798393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3808393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ia = glyphStorage.getCharIndex(firstGlyph, success); 3818393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ib = glyphStorage.getCharIndex(firstGlyph + 1, success); 3828393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius ic = glyphStorage.getCharIndex(lastGlyph - 1, success); 3838393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius id = glyphStorage.getCharIndex(lastGlyph, success); 3848393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3858393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(firstGlyph, id, success); 3868393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(firstGlyph + 1, ic, success); 3878393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3888393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(lastGlyph - 1, ib, success); 3898393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius glyphStorage.setCharIndex(lastGlyph, ia, success); 3908393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius break; 3918393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3928393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius default: 3938393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius break; 3948393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius } 3958393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3968393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} 3978393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius 3988393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig CorneliusU_NAMESPACE_END 399