15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- SymbolCategory.cpp -------------------------------------------------===// 25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// The MCLinker Project 45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source 65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details. 75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/MC/SymbolCategory.h> 105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/LD/LDSymbol.h> 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <mcld/LD/ResolveInfo.h> 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <algorithm> 136f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include <cassert> 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld; 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// Category 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoSymbolCategory::Category::Type 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoSymbolCategory::Category::categorize(const ResolveInfo& pInfo) 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (ResolveInfo::File == pInfo.type()) 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return Category::File; 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (ResolveInfo::Local == pInfo.binding()) 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return Category::Local; 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (ResolveInfo::Common == pInfo.desc()) 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return Category::Common; 286f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines if (ResolveInfo::Default == pInfo.visibility() || 296f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines ResolveInfo::Protected == pInfo.visibility()) 306f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return Category::Dynamic; 316f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return Category::Regular; 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// SymbolCategory 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoSymbolCategory::SymbolCategory() 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 386f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pFile = new Category(Category::File); 396f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pLocal = new Category(Category::Local); 406f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pLocalDyn = new Category(Category::LocalDyn); 416f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pCommon = new Category(Category::Common); 426f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pDynamic = new Category(Category::Dynamic); 436f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pRegular = new Category(Category::Regular); 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 456f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pFile->next = m_pLocal; 466f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pLocal->next = m_pLocalDyn; 476f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pLocalDyn->next = m_pCommon; 486f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pCommon->next = m_pDynamic; 496f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pDynamic->next = m_pRegular; 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 516f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pRegular->prev = m_pDynamic; 526f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pDynamic->prev = m_pCommon; 536f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pCommon->prev = m_pLocalDyn; 546f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pLocalDyn->prev = m_pLocal; 556f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pLocal->prev = m_pFile; 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoSymbolCategory::~SymbolCategory() 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Category* current = m_pFile; 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao while (NULL != current) { 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Category* tmp = current; 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao current = current->next; 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete tmp; 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 686f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesSymbolCategory& SymbolCategory::add(LDSymbol& pSymbol, Category::Type pTarget) 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 706f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines Category* current = m_pRegular; 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_OutputSymbols.push_back(&pSymbol); 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // use non-stable bubble sort to arrange the order of symbols. 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao while (NULL != current) { 756f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines if (current->type == pTarget) { 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao current->end++; 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao break; 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao else { 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (!current->empty()) { 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao std::swap(m_OutputSymbols[current->begin], 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_OutputSymbols[current->end]); 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao current->end++; 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao current->begin++; 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao current = current->prev; 875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *this; 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 926f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesSymbolCategory& SymbolCategory::add(LDSymbol& pSymbol) 935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 946f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines assert(NULL != pSymbol.resolveInfo()); 956f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return add(pSymbol, Category::categorize(*pSymbol.resolveInfo())); 966f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 986f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesSymbolCategory& SymbolCategory::forceLocal(LDSymbol& pSymbol) 996f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines{ 1006f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return add(pSymbol, Category::Local); 1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1036f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesSymbolCategory& SymbolCategory::arrange(LDSymbol& pSymbol, 104f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines Category::Type pSource, 105f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines Category::Type pTarget) 1065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 107f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines int distance = pTarget - pSource; 1085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (0 == distance) { 1095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // in the same category, do not need to re-arrange 1105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *this; 1115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // source and target are not in the same category 1145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // find the category of source 1155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao Category* current = m_pFile; 1165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao while(NULL != current) { 117f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines if (pSource == current->type) 1185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao break; 1195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao current = current->next; 1205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(NULL != current); 123551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines size_t pos = 0; 124551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines if (!current->empty()) { 125551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines // find the position of source 126551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines pos = current->begin; 127551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines while (pos != current->end) { 128551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines if (m_OutputSymbols[pos] == &pSymbol) 129551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines break; 130551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines ++pos; 131551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines } 132551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines } 133551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines // FIXME: Try to search the symbol explicitly, if symbol is not in the given 134551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines // source category. Or we need to add some logics like shouldForceLocal() in 135551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines // SymbolCategory::Category::categorize(). 136551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines if (current->end == pos || current->empty()) { 137551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines current = m_pFile; 138551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines do { 139551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines pos = current->begin; 140551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines while (pos != current->end) { 141551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines if (m_OutputSymbols[pos] == &pSymbol) { 142551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines distance = pTarget - current->type; 143551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines break; 144551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines } 145551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines ++pos; 146551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines } 147551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines if (pos != current->end) 148551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines break; 149551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines current = current->next; 150551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines } while (current != NULL); 151551ae4ebd3e9d137ea668fb83ae4a55b8cfba451Stephen Hines assert(current != NULL); 1525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // The distance is positive. It means we should bubble sort downward. 1555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (distance > 0) { 1565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // downward 1575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao size_t rear; 1585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao do { 159f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines if (current->type == pTarget) { 1605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao break; 1615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao else { 1635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(!current->isLast() && "target category is wrong."); 1645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao rear = current->end - 1; 1655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao std::swap(m_OutputSymbols[pos], m_OutputSymbols[rear]); 1665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao pos = rear; 1675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao current->next->begin--; 1685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao current->end--; 1695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao current = current->next; 1715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } while(NULL != current); 1725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *this; 1745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } // downward 1755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // The distance is negative. It means we should bubble sort upward. 1775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (distance < 0) { 1785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao // upward 1805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao do { 181f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines if (current->type == pTarget) { 1825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao break; 1835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao else { 1855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao assert(!current->isFirst() && "target category is wrong."); 1865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao std::swap(m_OutputSymbols[current->begin], m_OutputSymbols[pos]); 1875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao pos = current->begin; 1885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao current->begin++; 1895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao current->prev->end++; 1905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 1915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao current = current->prev; 1925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } while(NULL != current); 1935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 1945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *this; 1955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } // upward 1965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *this; 1975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 1985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 199f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen HinesSymbolCategory& SymbolCategory::arrange(LDSymbol& pSymbol, 200f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines const ResolveInfo& pSourceInfo) 201f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines{ 202f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines assert(NULL != pSymbol.resolveInfo()); 203f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines return arrange(pSymbol, 204f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines Category::categorize(pSourceInfo), 205f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines Category::categorize(*pSymbol.resolveInfo())); 206f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines} 207f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines 2085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoSymbolCategory& SymbolCategory::changeCommonsToGlobal() 2095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 2106f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines // Change Common to Dynamic/Regular 2116f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines while (!emptyCommons()) { 2126f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines size_t pos = m_pCommon->end - 1; 2136f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines switch (Category::categorize(*(m_OutputSymbols[pos]->resolveInfo()))) { 2146f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines case Category::Dynamic: 2156f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pCommon->end--; 2166f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pDynamic->begin--; 2176f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines break; 2186f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines case Category::Regular: 2196f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines std::swap(m_OutputSymbols[pos], m_OutputSymbols[m_pDynamic->end - 1]); 2206f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pCommon->end--; 2216f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pDynamic->begin--; 2226f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pDynamic->end--; 2236f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines m_pRegular->begin--; 2246f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines break; 2256f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines default: 2266f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines assert(0); 2276f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines break; 2286f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines } 2295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 2305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *this; 2315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 233f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen HinesSymbolCategory& SymbolCategory::changeToDynamic(LDSymbol& pSymbol) 23422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 235f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines assert(NULL != pSymbol.resolveInfo()); 236f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines return arrange(pSymbol, 237f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines Category::categorize(*pSymbol.resolveInfo()), 238f7ac0f19a1c8d0ad14bcf6456ce368b830fea886Stephen Hines Category::LocalDyn); 23922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 24022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 2415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaosize_t SymbolCategory::numOfSymbols() const 2425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 2435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_OutputSymbols.size(); 2445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2466f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinessize_t SymbolCategory::numOfFiles() const 2476f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines{ 2486f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return m_pFile->size(); 2496f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 2506f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 2515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaosize_t SymbolCategory::numOfLocals() const 2525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 2536f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return m_pLocal->size(); 2546f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 2556f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 2566f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinessize_t SymbolCategory::numOfLocalDyns() const 2576f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines{ 2586f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return m_pLocalDyn->size(); 2595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaosize_t SymbolCategory::numOfCommons() const 2625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 2635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_pCommon->size(); 2645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2666f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinessize_t SymbolCategory::numOfDynamics() const 2676f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines{ 2686f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return m_pDynamic->size(); 2696f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 2706f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 2715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaosize_t SymbolCategory::numOfRegulars() const 2725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 2736f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return m_pRegular->size(); 2745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaobool SymbolCategory::empty() const 2775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 2786f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return m_OutputSymbols.empty(); 2796f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 2806f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 2816f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesbool SymbolCategory::emptyFiles() const 2826f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines{ 2836f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return m_pFile->empty(); 2845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaobool SymbolCategory::emptyLocals() const 2875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 2886f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return m_pLocal->empty(); 2896f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 2906f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 2916f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesbool SymbolCategory::emptyLocalDyns() const 2926f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines{ 2936f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return m_pLocalDyn->empty(); 2945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 2955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 2965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaobool SymbolCategory::emptyCommons() const 2975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 2985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_pCommon->empty(); 2995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 3005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3016f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesbool SymbolCategory::emptyDynamics() const 3026f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines{ 3036f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return m_pDynamic->empty(); 3046f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 3056f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 3065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaobool SymbolCategory::emptyRegulars() const 3075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 3086f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return m_pRegular->empty(); 3095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 3105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoSymbolCategory::iterator SymbolCategory::begin() 3125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 3135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_OutputSymbols.begin(); 3145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 3155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoSymbolCategory::iterator SymbolCategory::end() 3175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 3185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_OutputSymbols.end(); 3195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 3205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoSymbolCategory::const_iterator SymbolCategory::begin() const 3225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 3235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_OutputSymbols.begin(); 3245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 3255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoSymbolCategory::const_iterator SymbolCategory::end() const 3275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 3285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_OutputSymbols.end(); 3295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 3305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3316f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesSymbolCategory::iterator SymbolCategory::fileBegin() 3325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 3335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_OutputSymbols.begin(); 3345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 3355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3366f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesSymbolCategory::iterator SymbolCategory::fileEnd() 3375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 3386f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines iterator iter = fileBegin(); 3395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao iter += m_pFile->size(); 3406f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return iter; 3416f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 3426f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 3436f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesSymbolCategory::const_iterator SymbolCategory::fileBegin() const 3446f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines{ 3456f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return m_OutputSymbols.begin(); 3466f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 3476f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 3486f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesSymbolCategory::const_iterator SymbolCategory::fileEnd() const 3496f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines{ 3506f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines const_iterator iter = fileBegin(); 3516f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines iter += m_pFile->size(); 3526f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return iter; 3536f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 3546f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 3556f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesSymbolCategory::iterator SymbolCategory::localBegin() 3566f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines{ 3576f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return fileEnd(); 3586f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 3596f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 3606f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesSymbolCategory::iterator SymbolCategory::localEnd() 3616f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines{ 3626f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines iterator iter = localBegin(); 3635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao iter += m_pLocal->size(); 3645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return iter; 3655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 3665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoSymbolCategory::const_iterator SymbolCategory::localBegin() const 3685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 3696f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return fileEnd(); 3705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 3715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoSymbolCategory::const_iterator SymbolCategory::localEnd() const 3735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 3746f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines const_iterator iter = localBegin(); 3755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao iter += m_pLocal->size(); 3765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return iter; 3775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 3785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3796f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesSymbolCategory::iterator SymbolCategory::localDynBegin() 3805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 3815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return localEnd(); 3825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 3835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 3846f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesSymbolCategory::iterator SymbolCategory::localDynEnd() 3855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 3866f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines iterator iter = localDynBegin(); 3876f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines iter += m_pLocalDyn->size(); 38822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao return iter; 38922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 39022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 3916f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesSymbolCategory::const_iterator SymbolCategory::localDynBegin() const 39222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 39322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao return localEnd(); 39422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 39522add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 3966f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesSymbolCategory::const_iterator SymbolCategory::localDynEnd() const 39722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 3986f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines const_iterator iter = localDynBegin(); 3996f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines iter += m_pLocalDyn->size(); 40022add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao return iter; 40122add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 40222add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 40322add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei LiaoSymbolCategory::iterator SymbolCategory::commonBegin() 40422add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 4056f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return localDynEnd(); 40622add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao} 40722add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao 40822add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei LiaoSymbolCategory::iterator SymbolCategory::commonEnd() 40922add6ff3426df1a85089fe6a6e1597ee3b6f300Shih-wei Liao{ 4106f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines iterator iter = commonBegin(); 4115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao iter += m_pCommon->size(); 4125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return iter; 4135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 4145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoSymbolCategory::const_iterator SymbolCategory::commonBegin() const 4165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 4176f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return localDynEnd(); 4185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 4195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoSymbolCategory::const_iterator SymbolCategory::commonEnd() const 4215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 4226f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines const_iterator iter = commonBegin(); 4235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao iter += m_pCommon->size(); 4245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return iter; 4255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 4265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4276f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesSymbolCategory::iterator SymbolCategory::dynamicBegin() 4286f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines{ 4296f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return commonEnd(); 4306f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 4316f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 4326f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesSymbolCategory::iterator SymbolCategory::dynamicEnd() 4336f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines{ 4346f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines iterator iter = dynamicBegin(); 4356f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines iter += m_pDynamic->size(); 4366f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return iter; 4376f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 4386f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 4396f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesSymbolCategory::const_iterator SymbolCategory::dynamicBegin() const 4406f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines{ 4416f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return commonEnd(); 4426f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 4436f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 4446f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesSymbolCategory::const_iterator SymbolCategory::dynamicEnd() const 4456f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines{ 4466f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines const_iterator iter = dynamicBegin(); 4476f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines iter += m_pDynamic->size(); 4486f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines return iter; 4496f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} 4506f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 4515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoSymbolCategory::iterator SymbolCategory::regularBegin() 4525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 4535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return commonEnd(); 4545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 4555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoSymbolCategory::iterator SymbolCategory::regularEnd() 4575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 4585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_OutputSymbols.end(); 4595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 4605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoSymbolCategory::const_iterator SymbolCategory::regularBegin() const 4625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 4635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return commonEnd(); 4645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 4655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 4665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoSymbolCategory::const_iterator SymbolCategory::regularEnd() const 4675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 4685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_OutputSymbols.end(); 4695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 4705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 471