15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- AttributeFactory.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/MCLDAttribute.h" 105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "mcld/MC/AttributeFactory.h" 115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaousing namespace mcld; 135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//========================== 155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// AttributeFactory 165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoAttributeFactory::AttributeFactory() 175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao : m_AttrSet() { 185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_AttrSet.push_back(new mcld::Attribute()); 195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pLast = new AttributeProxy(*this, *m_AttrSet.front()); 205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoAttributeFactory::AttributeFactory(size_t pNum) 235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao : m_AttrSet() { 245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_AttrSet.reserve(pNum); 255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_AttrSet.push_back(new mcld::Attribute()); 265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pLast = new AttributeProxy(*this, *m_AttrSet.front()); 275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoAttributeFactory::~AttributeFactory() 305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao iterator cur = m_AttrSet.begin(); 325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao iterator aEnd = m_AttrSet.end(); 335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao while(cur != aEnd) { 345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete (*cur); 355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ++cur; 365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_AttrSet.clear(); 385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao delete m_pLast; 395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid AttributeFactory::reserve(size_t pNum) 425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_AttrSet.reserve(pNum); 445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoAttribute &AttributeFactory::predefined() 475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *m_AttrSet.front(); 495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoconst Attribute &AttributeFactory::predefined() const 525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *m_AttrSet.front(); 545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoAttributeProxy* AttributeFactory::produce() 575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pLast->change(m_AttrSet.front()); 595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return m_pLast->clone(); 605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoAttributeProxy& AttributeFactory::last() 635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *m_pLast; 655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoconst AttributeProxy& AttributeFactory::last() const 685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *m_pLast; 705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei LiaoAttribute* AttributeFactory::exists(const Attribute& pAttr) const 735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const_iterator cur = m_AttrSet.begin(); 755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao const_iterator aEnd = m_AttrSet.end(); 765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao while(cur != aEnd) { 775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao if (*(*cur) == pAttr) { 785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pLast->change(*cur); 795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return *cur; 805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao ++cur; 825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao } 835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao return 0; 845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaovoid AttributeFactory::record(mcld::Attribute &pAttr) 875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{ 885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_AttrSet.push_back(&pAttr); 895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao m_pLast->change(m_AttrSet.back()); 905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} 915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 92