00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "ParamBindings.hpp"
00012
00013 namespace OA {
00014
00015 namespace DataFlow {
00016
00017 void ParamBindings::output(IRHandlesIRInterface& ir)
00018 {
00019 sOutBuild->objStart("ParamBindings");
00020
00021 sOutBuild->mapStart("mCallerToCalleeMap", "CallHandle", "std::map<ProcHandle, std::map<MemRefHandle, SymHandle> > ");
00022 std::map<CallHandle, std::map<ProcHandle, std::map<MemRefHandle, SymHandle> > >::iterator reg_mCallerToCalleeMap_iterator;
00023 for(reg_mCallerToCalleeMap_iterator = mCallerToCalleeMap.begin();
00024 reg_mCallerToCalleeMap_iterator != mCallerToCalleeMap.end();
00025 reg_mCallerToCalleeMap_iterator++)
00026 {
00027 const CallHandle &first = reg_mCallerToCalleeMap_iterator->first;
00028 std::map<ProcHandle, std::map<MemRefHandle, SymHandle> > &second = reg_mCallerToCalleeMap_iterator->second;
00029 sOutBuild->mapEntryStart();
00030 sOutBuild->mapKeyStart();
00031 sOutBuild->outputIRHandle(first, ir);
00032 sOutBuild->mapKeyEnd();
00033 sOutBuild->mapValueStart();
00034 sOutBuild->mapStart("second", "ProcHandle", "std::map<MemRefHandle, SymHandle> ");
00035 std::map<ProcHandle, std::map<MemRefHandle, SymHandle> >::iterator reg_second_iterator;
00036 for(reg_second_iterator = second.begin();
00037 reg_second_iterator != second.end();
00038 reg_second_iterator++)
00039 {
00040 const ProcHandle &first = reg_second_iterator->first;
00041 std::map<MemRefHandle, SymHandle> &second = reg_second_iterator->second;
00042 sOutBuild->mapEntryStart();
00043 sOutBuild->mapKeyStart();
00044 sOutBuild->outputIRHandle(first, ir);
00045 sOutBuild->mapKeyEnd();
00046 sOutBuild->mapValueStart();
00047 sOutBuild->mapStart("second", "MemRefHandle", "SymHandle");
00048 std::map<MemRefHandle, SymHandle>::iterator reg_second_iterator;
00049 for(reg_second_iterator = second.begin();
00050 reg_second_iterator != second.end();
00051 reg_second_iterator++)
00052 {
00053 const MemRefHandle &first = reg_second_iterator->first;
00054 SymHandle &second = reg_second_iterator->second;
00055 sOutBuild->mapEntryStart();
00056 sOutBuild->mapKeyStart();
00057 sOutBuild->outputIRHandle(first, ir);
00058 sOutBuild->mapKeyEnd();
00059 sOutBuild->mapValueStart();
00060 sOutBuild->outputIRHandle(second, ir);
00061 sOutBuild->mapValueEnd();
00062 sOutBuild->mapEntryEnd();
00063 }
00064 sOutBuild->mapEnd("second");
00065
00066 sOutBuild->mapValueEnd();
00067 sOutBuild->mapEntryEnd();
00068 }
00069 sOutBuild->mapEnd("second");
00070
00071 sOutBuild->mapValueEnd();
00072 sOutBuild->mapEntryEnd();
00073 }
00074 sOutBuild->mapEnd("mCallerToCalleeMap");
00075
00076 sOutBuild->mapStart("mCalleeToCallerMap", "CallHandle", "std::map<SymHandle, MemRefHandle> ");
00077 std::map<CallHandle, std::map<SymHandle, MemRefHandle> >::iterator reg_mCalleeToCallerMap_iterator;
00078 for(reg_mCalleeToCallerMap_iterator = mCalleeToCallerMap.begin();
00079 reg_mCalleeToCallerMap_iterator != mCalleeToCallerMap.end();
00080 reg_mCalleeToCallerMap_iterator++)
00081 {
00082 const CallHandle &first = reg_mCalleeToCallerMap_iterator->first;
00083 std::map<SymHandle, MemRefHandle> &second = reg_mCalleeToCallerMap_iterator->second;
00084 sOutBuild->mapEntryStart();
00085 sOutBuild->mapKeyStart();
00086 sOutBuild->outputIRHandle(first, ir);
00087 sOutBuild->mapKeyEnd();
00088 sOutBuild->mapValueStart();
00089 sOutBuild->mapStart("second", "SymHandle", "MemRefHandle");
00090 std::map<SymHandle, MemRefHandle>::iterator reg_second_iterator;
00091 for(reg_second_iterator = second.begin();
00092 reg_second_iterator != second.end();
00093 reg_second_iterator++)
00094 {
00095 const SymHandle &first = reg_second_iterator->first;
00096 MemRefHandle &second = reg_second_iterator->second;
00097 sOutBuild->mapEntryStart();
00098 sOutBuild->mapKeyStart();
00099 sOutBuild->outputIRHandle(first, ir);
00100 sOutBuild->mapKeyEnd();
00101 sOutBuild->mapValueStart();
00102 sOutBuild->outputIRHandle(second, ir);
00103 sOutBuild->mapValueEnd();
00104 sOutBuild->mapEntryEnd();
00105 }
00106 sOutBuild->mapEnd("second");
00107
00108 sOutBuild->mapValueEnd();
00109 sOutBuild->mapEntryEnd();
00110 }
00111 sOutBuild->mapEnd("mCalleeToCallerMap");
00112
00113 sOutBuild->mapStart("mProcToFormalSetMap", "ProcHandle", "OA_ptr<std::set<SymHandle> >");
00114 std::map<ProcHandle, OA_ptr<std::set<SymHandle> > >::iterator reg_mProcToFormalSetMap_iterator;
00115 for(reg_mProcToFormalSetMap_iterator = mProcToFormalSetMap.begin();
00116 reg_mProcToFormalSetMap_iterator != mProcToFormalSetMap.end();
00117 reg_mProcToFormalSetMap_iterator++)
00118 {
00119 const ProcHandle &first = reg_mProcToFormalSetMap_iterator->first;
00120 OA_ptr<std::set<SymHandle> > &second = reg_mProcToFormalSetMap_iterator->second;
00121 sOutBuild->mapEntryStart();
00122 sOutBuild->mapKeyStart();
00123 sOutBuild->outputIRHandle(first, ir);
00124 sOutBuild->mapKeyEnd();
00125 sOutBuild->mapValueStart();
00126 sOutBuild->listStart();
00127 std::set<SymHandle>::iterator setIter;
00128 for (setIter=second->begin(); setIter!=second->end(); setIter++) {
00129 SymHandle sym = *setIter;
00130 sOutBuild->listItemStart();
00131 sOutBuild->outputIRHandle(sym,ir);
00132 sOutBuild->listItemEnd();
00133 }
00134 sOutBuild->listEnd();
00135 sOutBuild->mapValueEnd();
00136 sOutBuild->mapEntryEnd();
00137 }
00138 sOutBuild->mapEnd("mProcToFormalSetMap");
00139
00140 sOutBuild->mapStart("mCallToActualSetMap", "CallHandle", "OA_ptr<std::set<MemRefHandle> >");
00141 std::map<CallHandle, OA_ptr<std::set<MemRefHandle> > >::iterator reg_mCallToActualSetMap_iterator;
00142 for(reg_mCallToActualSetMap_iterator = mCallToActualSetMap.begin();
00143 reg_mCallToActualSetMap_iterator != mCallToActualSetMap.end();
00144 reg_mCallToActualSetMap_iterator++)
00145 {
00146 const CallHandle &first = reg_mCallToActualSetMap_iterator->first;
00147 OA_ptr<std::set<MemRefHandle> > &second = reg_mCallToActualSetMap_iterator->second;
00148 sOutBuild->mapEntryStart();
00149 sOutBuild->mapKeyStart();
00150 sOutBuild->outputIRHandle(first, ir);
00151 sOutBuild->mapKeyEnd();
00152 sOutBuild->mapValueStart();
00153 sOutBuild->listStart();
00154 std::set<MemRefHandle>::iterator setIter;
00155 for (setIter=second->begin(); setIter!=second->end(); setIter++) {
00156 MemRefHandle ref = *setIter;
00157 sOutBuild->listItemStart();
00158 sOutBuild->outputIRHandle(ref,ir);
00159 sOutBuild->listItemEnd();
00160 }
00161 sOutBuild->listEnd();
00162 sOutBuild->mapValueEnd();
00163 sOutBuild->mapEntryEnd();
00164 }
00165 sOutBuild->mapEnd("mCallToActualSetMap");
00166
00167
00168
00169 {
00170 sOutBuild->mapStart("mCallToExprListMap","CallHandle",
00171 "OA_ptr<std::list<ExprHandle>");
00172 std::map<CallHandle, OA_ptr<std::list<ExprHandle> > >::iterator mapIter;
00173 OA_ptr<ExprHandleIterator> exprIter;
00174 for (mapIter = mCallToExprListMap.begin();
00175 mapIter != mCallToExprListMap.end();
00176 mapIter++) {
00177 const CallHandle &call = mapIter->first;
00178 exprIter = getActualExprHandleIterator(call);
00179
00180 sOutBuild->mapEntryStart();
00181 sOutBuild->mapKeyStart();
00182 sOutBuild->outputIRHandle(call, ir);
00183 sOutBuild->mapKeyEnd();
00184 sOutBuild->mapValueStart();
00185 sOutBuild->listStart();
00186 if (!exprIter.ptrEqual(0)) {
00187 if (exprIter->isValid()) {
00188 for (; exprIter->isValid(); ++(*exprIter) ) {
00189 ExprHandle expr = exprIter->current();
00190 sOutBuild->listItemStart();
00191 sOutBuild->outputIRHandle(expr,ir);
00192 sOutBuild->listItemEnd();
00193 }
00194 } else {
00195 sOutBuild->listItemStart();
00196 sOutBuild->outputString( " expr List is Empty " );
00197 sOutBuild->listItemEnd();
00198 }
00199 } else {
00200 sOutBuild->listItemStart();
00201 sOutBuild->outputString( " expr List is NULL " );
00202 sOutBuild->listItemEnd();
00203 }
00204
00205 sOutBuild->listEnd();
00206 sOutBuild->mapValueEnd();
00207 sOutBuild->mapEntryEnd();
00208 }
00209 sOutBuild->mapEnd("mCallToExprListMap");
00210 }
00211
00212 {
00213 sOutBuild->mapStart("mExprToTreeMap","ExprHandle","OA_ptr<ExprTree>");
00214 std::map<ExprHandle,OA_ptr<ExprTree> >::iterator mapIter;
00215 OA_ptr<ExprTree> eTree;
00216 for (mapIter = mExprToTreeMap.begin();
00217 mapIter != mExprToTreeMap.end();
00218 mapIter++) {
00219 const ExprHandle &expr = mapIter->first;
00220 eTree = mapIter->second;
00221
00222 sOutBuild->mapEntryStart();
00223 sOutBuild->mapKeyStart();
00224 if (!eTree.ptrEqual(0)) {
00225 sOutBuild->outputIRHandle(expr, ir);
00226 }
00227 sOutBuild->mapKeyEnd();
00228 sOutBuild->mapValueStart();
00229 eTree->output(ir);
00230 sOutBuild->mapValueEnd();
00231 sOutBuild->mapEntryEnd();
00232 }
00233 sOutBuild->mapEnd("mExprToTreeMap");
00234 }
00235
00236
00237 {
00238 sOutBuild->mapStart("mCallToFormalToActualMap","CallHandle","SymToExprHandleMap");
00239 std::map<CallHandle,std::map<SymHandle,ExprHandle> >::iterator mapIter;
00240 for (mapIter = mCallToFormalToActualMap.begin();
00241 mapIter != mCallToFormalToActualMap.end();
00242 mapIter++) {
00243 const CallHandle &call = mapIter->first;
00244 sOutBuild->mapEntryStart();
00245 sOutBuild->mapKeyStart();
00246 sOutBuild->outputIRHandle(call, ir);
00247 sOutBuild->mapKeyEnd();
00248 sOutBuild->mapValueStart();
00249 sOutBuild->mapStart("symToExprMap","SymHandle","ExprHandle");
00250
00251 std::map<SymHandle,ExprHandle> symToExprMap = mapIter->second;
00252 std::map<SymHandle,ExprHandle>::iterator map2Iter;
00253 for (map2Iter = symToExprMap.begin();
00254 map2Iter != symToExprMap.end();
00255 map2Iter++) {
00256 const SymHandle &formal = map2Iter->first;
00257 const ExprHandle &expr = map2Iter->second;
00258
00259 sOutBuild->mapEntryStart();
00260 sOutBuild->mapKeyStart();
00261 sOutBuild->outputIRHandle(formal, ir);
00262 sOutBuild->mapKeyEnd();
00263 sOutBuild->mapValueStart();
00264 sOutBuild->outputIRHandle(expr, ir);
00265 sOutBuild->mapValueEnd();
00266 sOutBuild->mapEntryEnd();
00267 }
00268 sOutBuild->mapEnd("symToExprMap");
00269 sOutBuild->mapValueEnd();
00270 sOutBuild->mapEntryEnd();
00271 }
00272 sOutBuild->mapEnd("mFormalToActualExprMap");
00273 }
00274
00275 sOutBuild->objEnd("ParamBindings");
00276 }
00277
00278
00279 }
00280 }