00001
00002
00003
00004
00005
00006
00007
00008
00009 #if !defined(oagTimerDesignData_P)
00010 #define oagTimerDesignData_P
00011
00012 #include <map>
00013 #include <iostream>
00014 #include <vector>
00015 #include "oaDesignDB.h"
00016
00017 using namespace std;
00018 using namespace oa;
00019
00020 typedef map<oaModInst*,int> InstsMap;
00021
00022 namespace oagTimer{
00023
00024 class DesignData{
00025 public:
00026 DesignData();
00027 ~DesignData();
00028
00029
00031 public:
00032 void add(oaDesign *des);
00033 void buildTopological(oaDesign *des);
00034 vector<InstsMap>::iterator getNextIter();
00035 vector<InstsMap>::iterator getCurrIter();
00036 void moveNextIter();
00037 bool hasNext();
00038
00039 InstsMap getCurrCellInsts();
00040 InstsMap getAllPI();
00041 InstsMap getAllP0();
00042 void getAllFanouts(InstsMap currInsts, vector<InstsMap> &vec);
00043 oaModInst* getPI();
00044 oaModInst* getP0();
00045 vector<InstsMap> getMap();
00046 private:
00047 void buildDesGraph();
00048 oaModNet* getOutputNet(oaModInst *inst);
00049 void getFanouts(InstsMap fanin);
00050
00052 private:
00053 oaDesign *design;
00054
00055 vector<InstsMap> desGraph;
00056 vector<InstsMap>::iterator level_iter;
00057 };
00058
00059 }
00060 #endif