project.cpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include <utility>
  2. #include "project.h"
  3. #include "Procedure.h"
  4. Project g_proj;
  5. bool Project::valid(ilFunction iter)
  6. {
  7. return iter!=pProcList.end();
  8. }
  9. ilFunction Project::funcIter(Function *to_find)
  10. {
  11. auto iter=std::find_if(pProcList.begin(),pProcList.end(),
  12. [to_find](const Function &f)->bool {return to_find==&f;});
  13. assert(iter!=pProcList.end());
  14. return iter;
  15. }
  16. ilFunction Project::findByEntry(uint32_t entry)
  17. {
  18. /* Search procedure list for one with appropriate entry point */
  19. ilFunction iter= std::find_if(pProcList.begin(),pProcList.end(),
  20. [entry](const Function &f) ->
  21. bool { return f.procEntry==entry; });
  22. return iter;
  23. }
  24. ilFunction Project::createFunction()
  25. {
  26. pProcList.push_back(Function::Create());
  27. return (++pProcList.rbegin()).base();
  28. }
  29. int Project::getSymIdxByAdd(uint32_t adr)
  30. {
  31. size_t i;
  32. for (i = 0; i < symtab.size(); i++)
  33. if (symtab[i].label == adr)
  34. break;
  35. return i;
  36. }
  37. bool Project::validSymIdx(size_t idx)
  38. {
  39. return idx<symtab.size();
  40. }
  41. const SYM &Project::getSymByIdx(size_t idx) const
  42. {
  43. return symtab[idx];
  44. }
  45. size_t Project::symbolSize(size_t idx)
  46. {
  47. assert(validSymIdx(idx));
  48. return symtab[idx].size;
  49. }
  50. hlType Project::symbolType(size_t idx)
  51. {
  52. assert(validSymIdx(idx));
  53. return symtab[idx].type;
  54. }
  55. const std::string &Project::symbolName(size_t idx)
  56. {
  57. assert(validSymIdx(idx));
  58. return symtab[idx].name;
  59. }
  60. Project *get()
  61. {
  62. return &g_proj;
  63. }