16f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines//===- FGNode.h -----------------------------------------------------------===// 26f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines// 36f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines// The MCLinker Project 46f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines// 56f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines// This file is distributed under the University of Illinois Open Source 66f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines// License. See LICENSE.TXT for details. 76f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines// 86f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines//===----------------------------------------------------------------------===// 96f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#ifndef MCLD_FGNODE_H 106f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#define MCLD_FGNODE_H 116f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#ifdef ENABLE_UNITTEST 126f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include <gtest.h> 136f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#endif 146f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 156f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include <llvm/Support/DataTypes.h> 166f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 176f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#include <vector> 186f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 196f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesnamespace mcld 206f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines{ 216f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 226f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesclass Relocation; 236f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesclass ResolveInfo; 246f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesclass Fragment; 256f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 266f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines/** \class FGNode 276f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines * \brief FGNode is a node for FragmentGraph 286f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines */ 296f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesclass FGNode 306f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines{ 316f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinespublic: 326f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines typedef ResolveInfo* Slot; 336f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines typedef Relocation* Signal; 346f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 356f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines typedef std::vector<Fragment*> FragmentListType; 366f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines typedef FragmentListType::iterator frag_iterator; 376f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines typedef FragmentListType::const_iterator const_frag_iterator; 386f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 396f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines typedef std::vector<Slot> SlotListType; 406f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines typedef SlotListType::iterator slot_iterator; 416f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines typedef SlotListType::const_iterator const_slot_iterator; 426f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 436f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines typedef std::vector<Signal> SignalListType; 446f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines typedef SignalListType::iterator signal_iterator; 456f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines typedef SignalListType::const_iterator const_signal_iterator; 466f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 476f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinespublic: 486f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines FGNode(); 496f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines explicit FGNode(uint32_t pIndex); 506f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 516f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines void addFragment(Fragment* pFrag); 526f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines void addSignal(Signal pSignal); 536f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines void addSlot(Slot pSlot); 546f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 556f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines /// ----- observers ----- /// 566f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines uint32_t getIndex() const 576f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { return m_Index; } 586f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 596f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines slot_iterator slot_begin () { return m_Slots.begin(); } 606f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines const_slot_iterator slot_begin () const { return m_Slots.begin(); } 616f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines slot_iterator slot_end () { return m_Slots.end(); } 626f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines const_slot_iterator slot_end () const { return m_Slots.end(); } 636f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 646f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines signal_iterator signal_begin () { return m_Signals.begin(); } 656f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines const_signal_iterator signal_begin () const { return m_Signals.begin(); } 666f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines signal_iterator signal_end () { return m_Signals.end(); } 676f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines const_signal_iterator signal_end () const { return m_Signals.end(); } 686f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 696f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines frag_iterator frag_begin () { return m_Fragments.begin(); } 706f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines const_frag_iterator frag_begin () const { return m_Fragments.begin(); } 716f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines frag_iterator frag_end () { return m_Fragments.end(); } 726f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines const_frag_iterator frag_end () const { return m_Fragments.end(); } 736f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 746f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesprivate: 756f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines FragmentListType m_Fragments; 766f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 776f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines /// m_Signals - a list of relocations describes the possible fan-out of this 786f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines /// node 796f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines SignalListType m_Signals; 806f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 816f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines /// m_Slots - a list of symbols describes the possible fan-in of this node 826f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines SlotListType m_Slots; 836f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 846f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines /// m_Index - the index in the reachability matrix 856f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines uint32_t m_Index; 866f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines}; 876f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 886f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines} // namespace of mcld 896f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 906f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#endif 916f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 92