00001 #include "stdafx.h"
00002 #include "CodeGen.h"
00003 #include "Dumper.h"
00004
00005 extern int s_ind;
00006
00007
00008 void CodeGen::folderGetter( const std::string& retval_folderkind, const std::string& folderkind, const std::string& method_name, bool extended, Any * cont, Method& m)
00009 {
00010 std::string src, comm;
00011
00012 src = indent(s_ind + 0) + "{\n";
00013 src += indent(s_ind + 1) + "std::set<" + retval_folderkind + "> res;\n";
00014 src += indent(s_ind + 1) + "std::set<BON::Folder> l = FolderImpl::getChildFolders();\n";
00015 src += indent(s_ind + 1) + "for( std::set<BON::Folder>::iterator i = l.begin(); i != l.end(); ++i)\n";
00016 src += indent(s_ind + 1) + "{\n";
00017 src += indent(s_ind + 2) + retval_folderkind + " elem(*i);\n";
00018 if ( extended)
00019 src += indent(s_ind + 2) + "if (elem)\n";
00020 else
00021 src += indent(s_ind + 2) + "if (elem && elem->getObjectMeta().name() == \"" + folderkind + "\")\n";
00022 src += indent(s_ind + 3) + "res.insert(elem);\n";
00023 src += indent(s_ind + 1) + "}\n";
00024 src += indent(s_ind + 1) + "return res;\n";
00025 src += indent(s_ind + 0) + "}\n\n\n";
00026
00027 comm = "getter for subfolder \"" + folderkind + "\"";
00028
00029 m.m_virtual = true;
00030 m.m_returnValue = "std::set<" + retval_folderkind + ">";
00031 m.m_signature = method_name + "()";
00032 m.m_implementation = src;
00033 m.m_container = cont;
00034 m.m_comment = comm;
00035
00036 return;
00037 }
00038
00039
00040 void CodeGen::kindGetter1( const std::string& retval_kind, const std::string& kind, const std::string& method_name, Any * cont, Method& m)
00041 {
00042 std::string src, comm;
00043
00044 comm = "getter for kind \"" + kind + "\"";
00045 src = indent(s_ind + 0) + "{\n";
00046 src += indent(s_ind + 1) + "std::set<" + retval_kind + "> res;\n";
00047 src += indent(s_ind + 1) + "std::set<BON::Object> kinds = FolderImpl::getChildObjects";
00048 src += "(\"" + kind + "\");\n";
00049 src += indent(s_ind + 1) + "for( std::set<BON::Object>::iterator i = kinds.begin(); i != kinds.end(); ++i)\n";
00050 src += indent(s_ind + 1) + "{\n";
00051 src += indent(s_ind + 2) + retval_kind + " elem(*i);\n";
00052 src += indent(s_ind + 2) + "ASSERT(elem);\n";
00053 src += indent(s_ind + 2) + "res.insert(elem);\n";
00054 src += indent(s_ind + 1) + "}\n";
00055 src += indent(s_ind + 1) + "return res;\n";
00056 src += indent(s_ind + 0) + "}\n\n\n";
00057
00058 m.m_virtual = true;
00059 m.m_returnValue = "std::set<" + retval_kind + ">";
00060 m.m_signature = method_name + "()";
00061 m.m_implementation = src;
00062 m.m_container = cont;
00063 m.m_comment = comm;
00064
00065 return;
00066 }
00067
00068
00069 void CodeGen::kindGetter2( const std::string& retval_kind, const std::string& kind, const std::vector< std::string>& kind_vec, const std::string& method_name, Any * cont, Method& m)
00070 {
00071 std::string src, comm;
00072
00073
00074 char len_s[10]; sprintf(len_s, "%u", kind_vec.size()); std::string len_str( len_s);
00075
00076 src = indent(s_ind + 0) + "{\n";
00077 src += indent(s_ind + 1) + "std::set<" + retval_kind + "> res;\n";
00078 src += indent(s_ind + 1) + "const int len = " + len_str + ";\n";
00079 src += indent(s_ind + 1) + "std::set<BON::Object> kinds_vec[ len];\n";
00080
00081 for( int k = 0; k < kind_vec.size(); ++k)
00082 {
00083 char k_s[10]; sprintf( k_s, "%i", k); std::string k_str( k_s);
00084 src += indent(s_ind + 1) + "kinds_vec[" + k_str + "] = FolderImpl::getChildObjects";
00085 src += "(\"" + kind_vec[k] + "\");\n";
00086 }
00087 src += indent(s_ind + 1) + "for( int k = 0; k < len; ++k)\n";
00088 src += indent(s_ind + 2) + "for( std::set<BON::Object>::iterator i = kinds_vec[k].begin(); i != kinds_vec[k].end(); ++i)\n";
00089 src += indent(s_ind + 2) + "{\n";
00090 src += indent(s_ind + 3) + retval_kind + " elem(*i);\n";
00091 src += indent(s_ind + 3) + "ASSERT(elem);\n";
00092 src += indent(s_ind + 3) + "res.insert(elem);\n";
00093 src += indent(s_ind + 2) + "}\n";
00094 src += indent(s_ind + 1) + "return res;\n";
00095 src += indent(s_ind + 0) + "}\n\n\n";
00096
00097 comm = "aggregated getter for kind \"" + kind + "\" and its descendants";
00098
00099 m.m_virtual = true;
00100 m.m_returnValue = "std::set<" + retval_kind + ">";
00101 m.m_signature = method_name + "()";
00102 m.m_implementation = src;
00103 m.m_container = cont;
00104 m.m_comment = comm;
00105 }
00106
00107
00108 void CodeGen::kindGetter3( const std::string& retval_kind, const std::string& kind, const std::string& method_name, Any * cont, Method& m)
00109 {
00110
00111 std::string src, comm;
00112
00113 comm = "EXCL getter for kind \"" + kind + "\"";
00114
00115 src = "{\n";
00116 src += " std::set<" + retval_kind + "> res;\n";
00117 src += " std::set<Object> l = FolderImpl::getChildObjects";
00118 src += "(\"" + kind + "\");\n";
00119 src += " for( std::set<Object>::iterator i = l.begin(); i != l.end(); ++i)\n";
00120 src += " {\n";
00121 src += " " + retval_kind + " elem(*i);\n";
00122 src += " ASSERT(elem);\n";
00123 src += " res.insert(elem);\n";
00124 src += " }\n";
00125 src += " return res;\n";
00126 src += "}\n\n\n";
00127
00128 m.m_virtual = true;
00129 m.m_returnValue = "std::set<" + retval_kind + ">";
00130 m.m_signature = method_name + "_Excl()";
00131 m.m_implementation = src;
00132 m.m_container = cont;
00133 m.m_comment = comm;
00134 }
00135
00136 void CodeGen::roleGetter1( const std::string& retval_kind, const std::string& inquire, const std::string& method_name, const std::string& fco_name, Any * cont, Method& m)
00137 {
00138 std::string src, comm;
00139
00140 src = indent(s_ind + 0) + "{\n";
00141 src += indent(s_ind + 1) + "std::set<" + retval_kind + "> res;\n";
00142 src += indent(s_ind + 1) + "std::set<BON::FCO> roles = ModelImpl::getChildFCOsAs";
00143 src += "(\"" + inquire + "\");\n";
00144 src += indent(s_ind + 1) + "for( std::set<BON::FCO>::iterator i = roles.begin(); i != roles.end(); ++i)\n";
00145 src += indent(s_ind + 1) + "{\n";
00146 src += indent(s_ind + 2) + retval_kind + " elem(*i);\n";
00147 src += indent(s_ind + 2) + "ASSERT(elem);\n";
00148 src += indent(s_ind + 2) + "res.insert(elem);\n";
00149 src += indent(s_ind + 1) + "}\n";
00150 src += indent(s_ind + 1) + "return res;\n";
00151 src += indent(s_ind + 0) + "}\n\n\n";
00152
00153 comm = "getter for role \"" + inquire + "\" among \"" + fco_name + "\"s";
00154
00155 m.m_virtual = true;
00156 m.m_returnValue = "std::set<" + retval_kind + ">";
00157 m.m_signature = method_name + "()";
00158 m.m_implementation = src;
00159 m.m_container = cont;
00160 m.m_comment = comm;
00161
00162 return;
00163 }
00164
00165
00166 void CodeGen::roleGetter2( const std::string& retval_kind, const std::string& inquire, const std::string& method_name, const std::string& fco_name, Any * cont, Method& m)
00167 {
00168 std::string src, comm;
00169
00170 src = indent(s_ind + 0) + "{\n";
00171 src += indent(s_ind + 1) + "std::set<" + retval_kind + "> res;\n";
00172 src += indent(s_ind + 1) + "std::set<BON::FCO> roles = ModelImpl::getChildFCOsAs";
00173 src += "(\"" + inquire + "\");\n";
00174 src += indent(s_ind + 1) + "for( std::set<BON::FCO>::iterator i = roles.begin(); i != roles.end(); ++i)\n";
00175 src += indent(s_ind + 1) + "{\n";
00176 src += indent(s_ind + 2) + retval_kind + " elem(*i);\n";
00177 src += indent(s_ind + 2) + "ASSERT(elem);\n";
00178 src += indent(s_ind + 2) + "res.insert(elem);\n";
00179 src += indent(s_ind + 1) + "}\n";
00180 src += indent(s_ind + 1) + "return res;\n";
00181 src += indent(s_ind + 0) + "}\n\n\n";
00182
00183 comm = "getter for role \"" + inquire + "\" among \"" + fco_name + "\"s";
00184
00185 m.m_virtual = true;
00186 m.m_returnValue = "std::set<" + retval_kind + ">";
00187 m.m_signature = method_name + "()";
00188 m.m_implementation = src;
00189 m.m_container = cont;
00190 m.m_comment = comm;
00191
00192 return;
00193 }
00194
00195
00196 void CodeGen::roleGetter3( const std::string& retval_kind, const std::string& method_name, const std::string& fco_name, const std::string& role_name, const std::vector< std::string > & roles, const std::string& dummy_str, Any * cont, Method& m)
00197 {
00198 std::string src, comm;
00199
00200 char len_s[10]; sprintf(len_s, "%u", roles.size()); std::string len_str( len_s);
00201
00202 src = indent(s_ind + 0) + "{\n";
00203 src += indent(s_ind + 1) + "std::set<" + retval_kind + "> res;\n";
00204 src += indent(s_ind + 1) + "const int len = " + len_str + ";\n";
00205 src += indent(s_ind + 1) + "std::set<BON::FCO> roles_vec[ len];\n";
00206
00207 for( int k = 0; k < roles.size(); ++k)
00208 {
00209 char k_s[10]; sprintf( k_s, "%i", k); std::string k_str( k_s);
00210 src += indent(s_ind + 1) + "roles_vec[" + k_str + "] = ModelImpl::getChildFCOsAs";
00211 src += "(\"";
00212 src += roles[k];
00213 src += "\");\n";
00214 }
00215
00216 src += indent(s_ind + 1) + "for( int k = 0; k < len; ++k)\n";
00217 src += indent(s_ind + 2) + "for( std::set<BON::FCO>::iterator i = roles_vec[k].begin(); i != roles_vec[k].end(); ++i)\n";
00218 src += indent(s_ind + 2) + "{\n";
00219 src += indent(s_ind + 3) + retval_kind + " elem(*i);\n";
00220 src += indent(s_ind + 3) + "ASSERT(elem);\n";
00221 src += indent(s_ind + 3) + "res.insert(elem);\n";
00222 src += indent(s_ind + 2) + "}\n";
00223 src += indent(s_ind + 1) + "return res;\n";
00224 src += indent(s_ind + 0) + "}\n\n\n";
00225
00226 comm = "aggregated getter for role \"" + role_name + "\" among \"" + fco_name + "\"s and its descendants";
00227
00228 m.m_virtual = true;
00229 m.m_returnValue = "std::set<" + retval_kind + ">";
00230 m.m_signature = method_name + "(" + dummy_str + ")";
00231 m.m_implementation = src;
00232 m.m_container = cont;
00233 m.m_comment = comm;
00234
00235 return;
00236 }
00237
00238
00239 void CodeGen::roleGetter4( const std::string& retval_kind, const std::string& method_name, const std::string& fco_name, const std::string& desc_k_name, const std::string& role_name, const std::string& nmsp, Any * cont, Method& m)
00240 {
00241 std::string src, comm;
00242
00243 src = indent(s_ind + 0) + "{\n";
00244 src += indent(s_ind + 1) + "std::set<" + retval_kind + "> res;\n";
00245 src += indent(s_ind + 1) + "std::set<BON::FCO> roles = ModelImpl::getChildFCOsAs";
00246 src += "(\"";
00247 src += nmsp + desc_k_name + role_name;
00248 src += "\");\n";
00249 src += indent(s_ind + 1) + "for( std::set<BON::FCO>::iterator i = roles.begin(); i != roles.end(); ++i)\n";
00250 src += indent(s_ind + 1) + "{\n";
00251 src += indent(s_ind + 2) + retval_kind + " elem(*i);\n";
00252 src += indent(s_ind + 2) + "ASSERT(elem);\n";
00253 src += indent(s_ind + 2) + "res.insert(elem);\n";
00254 src += indent(s_ind + 1) + "}\n";
00255 src += indent(s_ind + 1) + "return res;\n";
00256 src += indent(s_ind + 0) + "}\n\n\n";
00257
00258 comm = "getter for role \"" + nmsp + desc_k_name + role_name + "\" among \"" + nmsp + fco_name + "\"s and its descendants";
00259
00260 m.m_virtual = true;
00261 m.m_returnValue = "std::set<" + retval_kind + ">";
00262 m.m_signature = method_name + "()";
00263 m.m_implementation = src;
00264 m.m_container = cont;
00265 m.m_comment = comm;
00266
00267 return;
00268 }
00269
00270
00271 Method CodeGen::dumpGetInConnectionLinks( FCO *fco, ConnectionRep * conn)
00272 {
00273 Method m;
00274
00275 std::string mmm;
00276
00277 mmm = indent(s_ind + 0) + "{\n";
00278 mmm += indent(s_ind + 1) + "std::set<" + conn->getLValidName() + "> result;\n";
00279 mmm += indent(s_ind + 1) + "std::set<BON::Connection> conns = ConnectionEndImpl::getInConnLinks();\n";
00280 mmm += indent(s_ind + 1) + "std::set<BON::Connection>::iterator it = conns.begin();\n";
00281 mmm += indent(s_ind + 1) + "for( ; it != conns.end(); ++it)\n";
00282 mmm += indent(s_ind + 1) + "{\n";
00283 mmm += indent(s_ind + 2) + conn->getLValidName() + " c( *it);\n";
00284 mmm += indent(s_ind + 2) + "if (c)\n";
00285 mmm += indent(s_ind + 3) + "result.insert( c);\n";
00286 mmm += indent(s_ind + 1) + "}\n";
00287 mmm += indent(s_ind + 1) + "return result;\n";
00288 mmm += indent(s_ind + 0) + "}\n\n\n";
00289
00290 m.m_signature = "getIn" + conn->getValidName() + "Links()";
00291 m.m_returnValue = "std::set<" + conn->getLValidName() + ">";
00292 m.m_implementation = mmm;
00293 m.m_container = fco;
00294 m.m_comment = "";
00295
00296 return m;
00297 }
00298
00299
00300
00301 Method CodeGen::dumpGetOutConnectionLinks( FCO *fco, ConnectionRep * conn)
00302 {
00303 Method m;
00304
00305 std::string mmm;
00306
00307 mmm = indent(s_ind + 0) + "{\n";
00308 mmm += indent(s_ind + 1) + "std::set<" + conn->getLValidName() + "> result;\n";
00309 mmm += indent(s_ind + 1) + "std::set<BON::Connection> conns = ConnectionEndImpl::getOutConnLinks();\n";
00310 mmm += indent(s_ind + 1) + "std::set<BON::Connection>::iterator it = conns.begin();\n";
00311 mmm += indent(s_ind + 1) + "for( ; it != conns.end(); ++it)\n";
00312 mmm += indent(s_ind + 1) + "{\n";
00313 mmm += indent(s_ind + 2) + conn->getLValidName() + " c( *it);\n";
00314 mmm += indent(s_ind + 2) + "if (c)\n";
00315 mmm += indent(s_ind + 3) + "result.insert( c);\n";
00316 mmm += indent(s_ind + 1) + "}\n";
00317 mmm += indent(s_ind + 1) + "return result;\n";
00318 mmm += indent(s_ind + 0) + "}\n\n\n";
00319
00320 m.m_signature = "getOut" + conn->getValidName() + "Links()";
00321 m.m_returnValue = "std::set<" + conn->getLValidName() + ">";
00322 m.m_implementation = mmm;
00323 m.m_container = fco;
00324 m.m_comment = "";
00325
00326 return m;
00327 }
00328
00329
00330
00331 Method CodeGen::dumpGetBothConnectionLinks( FCO *fco, ConnectionRep * conn)
00332 {
00333 Method m;
00334
00335 std::string mmm;
00336
00337 mmm = indent(s_ind + 0) + "{\n";
00338 mmm += indent(s_ind + 1) + "std::set<" + conn->getLValidName() + "> result;\n";
00339 mmm += indent(s_ind + 1) + "std::set<BON::Connection> conns = ConnectionEndImpl::getConnLinks();\n";
00340 mmm += indent(s_ind + 1) + "std::set<BON::Connection>::iterator it = conns.begin();\n";
00341 mmm += indent(s_ind + 1) + "for( ; it != conns.end(); ++it)\n";
00342 mmm += indent(s_ind + 1) + "{\n";
00343 mmm += indent(s_ind + 2) + conn->getLValidName() + " c( *it);\n";
00344 mmm += indent(s_ind + 2) + "if (c)\n";
00345 mmm += indent(s_ind + 3) + "result.insert( c);\n";
00346 mmm += indent(s_ind + 1) + "}\n";
00347 mmm += indent(s_ind + 1) + "return result;\n";
00348 mmm += indent(s_ind + 0) + "}\n\n\n";
00349
00350 m.m_signature = "get" + conn->getValidName() + "Links()";
00351 m.m_returnValue = "std::set<" + conn->getLValidName() + ">";
00352 m.m_implementation = mmm;
00353 m.m_container = fco;
00354 m.m_comment = "";
00355
00356 return m;
00357 }
00358
00359
00360 Method CodeGen::dumpGetInConnectionEnd( FCO *fco, FCO* peer, ConnectionRep* conn, bool peer_may_be_refport)
00361 {
00362 Method m;
00363 std::string peer_lcd;
00364 if (peer)
00365 peer_lcd = peer->getLValidName();
00366 else
00367 peer_lcd = "BON::FCO";
00368
00369 std::string mmm, nnn;
00370
00371 if ( peer_may_be_refport)
00372 {
00373
00374 nnn = indent(s_ind + 0) + "{\n";
00375 nnn += indent(s_ind + 1) + "return BON::ConnectionEndImpl::getInConnEnds(\"" + conn->getLStrictName() + "\");\n";
00376 nnn += indent(s_ind + 0) + "}\n\n\n";
00377
00378 m.m_signature = "get" + conn->getValidName() + "Srcs()";
00379 m.m_returnValue = "std::multiset<BON::ConnectionEnd>";
00380 m.m_implementation = nnn;
00381 m.m_container = fco;
00382 m.m_comment = "returns src " + peer_lcd + "s and referenceports";
00383 }
00384 else
00385 {
00386
00387 mmm = indent(s_ind + 0) + "{\n";
00388 mmm += indent(s_ind + 1) + "std::multiset<" + peer_lcd + "> res;\n";
00389 mmm += indent(s_ind + 1) + "{\n";
00390
00391 mmm += indent(s_ind + 2) + "std::multiset<BON::ConnectionEnd> in_ends = BON::ConnectionEndImpl::getInConnEnds(\"" + conn->getLStrictName() + "\");\n";
00392 mmm += indent(s_ind + 2) + "for ( std::multiset<BON::ConnectionEnd>::iterator cit = in_ends.begin() ; cit != in_ends.end() ; ++cit )\n";
00393 mmm += indent(s_ind + 2) + "{\n";
00394 mmm += indent(s_ind + 3) + peer_lcd + " dst( *cit );\n";
00395 mmm += indent(s_ind + 3) + "ASSERT(dst);\n";
00396 mmm += indent(s_ind + 3) + "res.insert( dst);\n";
00397 mmm += indent(s_ind + 2) + "}\n";
00398 mmm += indent(s_ind + 1) + "}\n";
00399 mmm += indent(s_ind + 1) + "return res;\n";
00400 mmm += indent(s_ind + 0) + "}\n\n\n";
00401
00402 m.m_signature = "get" + conn->getValidName() + "Srcs()";
00403 m.m_returnValue = "std::multiset<" + peer_lcd + ">";
00404 m.m_implementation = mmm;
00405 m.m_container = fco;
00406 m.m_comment = "returns src " + peer_lcd + "s";
00407 }
00408 return m;
00409 }
00410
00411
00412
00413 Method CodeGen::dumpGetOutConnectionEnd( FCO *fco, FCO* peer, ConnectionRep* conn, bool peer_may_be_refport)
00414 {
00415 Method m;
00416 std::string peer_lcd;
00417 if (peer)
00418 peer_lcd = peer->getLValidName();
00419 else
00420 peer_lcd = "BON::FCO";
00421
00422 std::string mmm, nnn;
00423
00424 if ( peer_may_be_refport)
00425 {
00426 nnn = indent(s_ind + 0) + "{\n";
00427 nnn += indent(s_ind + 1) + "return BON::ConnectionEndImpl::getOutConnEnds(\"" + conn->getLStrictName() + "\");\n";
00428 nnn += indent(s_ind + 0) + "}\n\n\n";
00429
00430 m.m_signature = "get" + conn->getValidName() + "Dsts()";
00431 m.m_returnValue = "std::multiset<BON::ConnectionEnd>";
00432 m.m_implementation = nnn;
00433 m.m_container = fco;
00434 m.m_comment = "returns dst " + peer_lcd + "s and referenceports";
00435 }
00436 else
00437 {
00438 mmm = indent(s_ind + 0) + "{\n";
00439 mmm += indent(s_ind + 1) + "std::multiset<" + peer_lcd + "> res;\n";
00440 mmm += indent(s_ind + 1) + "{\n";
00441 mmm += indent(s_ind + 2) + "std::multiset<BON::ConnectionEnd> out_ends = BON::ConnectionEndImpl::getOutConnEnds(\"" + conn->getLStrictName() + "\");\n";
00442 mmm += indent(s_ind + 2) + "for ( std::multiset<BON::ConnectionEnd>::iterator cit = out_ends.begin() ; cit != out_ends.end() ; ++cit )\n";
00443 mmm += indent(s_ind + 2) + "{\n";
00444 mmm += indent(s_ind + 3) + peer_lcd + " dst( *cit );\n";
00445 mmm += indent(s_ind + 3) + "ASSERT(dst);\n";
00446 mmm += indent(s_ind + 3) + "res.insert( dst);\n";
00447 mmm += indent(s_ind + 2) + "}\n";
00448 mmm += indent(s_ind + 1) + "}\n";
00449 mmm += indent(s_ind + 1) + "return res;\n";
00450 mmm += indent(s_ind + 0) + "}\n\n\n";
00451
00452 m.m_signature = "get" + conn->getValidName() + "Dsts()";
00453 m.m_returnValue = "std::multiset<" + peer_lcd + ">";
00454 m.m_implementation = mmm;
00455 m.m_container = fco;
00456 m.m_comment = "returns dst " + peer_lcd + "s";
00457 }
00458
00459 return m;
00460 }
00461
00462
00463 Method CodeGen::dumpGetBothConnectionEnd( FCO *fco, FCO* peer, ConnectionRep* conn, bool peer_may_be_refport)
00464 {
00465 Method m;
00466 std::string peer_lcd;
00467 if (peer)
00468 peer_lcd = peer->getLValidName();
00469 else
00470 peer_lcd = "BON::FCO";
00471
00472 std::string mmm, nnn;
00473
00474 if ( peer_may_be_refport)
00475 {
00476 nnn = indent(s_ind + 0) + "{\n";
00477 nnn += indent(s_ind + 1) + "return BON::ConnectionEndImpl::getConnEnds(\"" + conn->getLStrictName() + "\");\n";
00478 nnn += indent(s_ind + 0) + "}\n\n\n";
00479
00480 m.m_signature = "get" + conn->getValidName() + "Ends()";
00481 m.m_returnValue = "std::multiset<BON::ConnectionEnd>";
00482 m.m_implementation = nnn;
00483 m.m_container = fco;
00484 m.m_comment = "returns src and dst " + peer_lcd + "s and referenceports";
00485 }
00486 else
00487 {
00488 mmm += indent(s_ind + 0) + "{\n";
00489 mmm += indent(s_ind + 1) + "std::multiset<" + peer_lcd + "> res;\n";
00490 mmm += indent(s_ind + 1) + "{\n";
00491 mmm += indent(s_ind + 2) + "std::multiset<BON::ConnectionEnd> in_ends = BON::ConnectionEndImpl::getInConnEnds(\"" + conn->getLStrictName() + "\");\n";
00492 mmm += indent(s_ind + 2) + "for ( std::multiset<BON::ConnectionEnd>::iterator cit = in_ends.begin() ; cit != in_ends.end() ; ++cit )\n";
00493 mmm += indent(s_ind + 2) + "{\n";
00494 mmm += indent(s_ind + 3) + peer_lcd + " dst( *cit );\n";
00495 mmm += indent(s_ind + 3) + "ASSERT(dst);\n";
00496 mmm += indent(s_ind + 3) + "res.insert( dst);\n";
00497 mmm += indent(s_ind + 2) + "}\n";
00498 mmm += indent(s_ind + 2) + "std::multiset<BON::ConnectionEnd> out_ends = BON::ConnectionEndImpl::getOutConnEnds(\"" + conn->getLStrictName() + "\");\n";
00499 mmm += indent(s_ind + 2) + "for ( std::multiset<BON::ConnectionEnd>::iterator cot = out_ends.begin() ; cot != out_ends.end() ; ++cot )\n";
00500 mmm += indent(s_ind + 2) + "{\n";
00501 mmm += indent(s_ind + 3) + peer_lcd + " dst( *cot );\n";
00502 mmm += indent(s_ind + 3) + "ASSERT(dst);\n";
00503 mmm += indent(s_ind + 3) + "res.insert( dst);\n";
00504 mmm += indent(s_ind + 2) + "}\n";
00505 mmm += indent(s_ind + 1) + "}\n";
00506 mmm += indent(s_ind + 1) + "return res;\n";
00507 mmm += indent(s_ind + 0) + "}\n\n";
00508
00509 m.m_signature = "get" + conn->getValidName() + "Ends()";
00510 m.m_returnValue = "std::multiset<" + peer_lcd + ">";
00511 m.m_implementation = mmm;
00512 m.m_container = fco;
00513 m.m_comment = "returns src and dst " + peer_lcd + "s";
00514 }
00515 return m;
00516 }
00517
00518
00519 Method CodeGen::dumpGetSrc( FCO *fco, ConnectionRep * conn, bool fco_may_be_refport)
00520 {
00521 Method m;
00522 std::string oper1_lcd;
00523 if (fco && fco->isToBeEx())
00524 oper1_lcd = fco->getLValidName();
00525 else if ( fco && fco->getExtedAnc())
00526 oper1_lcd = fco->getExtedAnc()->getLValidName();
00527 else
00528 oper1_lcd = "BON::FCO";
00529
00530 std::string mmm, nnn;
00531
00532 if ( fco_may_be_refport)
00533 {
00534 nnn = indent(s_ind + 0) + "{\n";
00535 nnn += indent(s_ind + 1) + "return ConnectionImpl::getSrc();\n";
00536 nnn += indent(s_ind + 0) + "}\n\n\n";
00537
00538 m.m_signature = "getSrc()";
00539 m.m_returnValue = "BON::ConnectionEnd";
00540 m.m_implementation = nnn;
00541 m.m_container = conn;
00542 m.m_comment = "getSrc() return value is a ConnectionEnd";
00543 }
00544 else
00545 {
00546 mmm = indent(s_ind + 0) + "{\n";
00547 mmm += indent(s_ind + 1) + "BON::ConnectionEnd ce = ConnectionImpl::getSrc();\n";
00548 mmm += indent(s_ind + 1) + oper1_lcd + " sp( ce);\n";
00549 mmm += indent(s_ind + 1) + "if ( sp)\n";
00550 mmm += indent(s_ind + 2) + "return sp;\n";
00551 mmm += indent(s_ind + 0) + "\n";
00552 mmm += indent(s_ind + 1) + oper1_lcd + " empty;\n";
00553 mmm += indent(s_ind + 1) + "return empty;\n";
00554 mmm += indent(s_ind + 0) + "}\n\n\n";
00555
00556 m.m_signature = "getSrc()";
00557 m.m_returnValue = oper1_lcd;
00558 m.m_implementation = mmm;
00559 m.m_container = conn;
00560 m.m_comment = "getSrc() return value is a ConnectionEnd casted to " + oper1_lcd;
00561 }
00562 return m;
00563 }
00564
00565
00566 Method CodeGen::dumpGetDst( FCO *fco, ConnectionRep * conn, bool fco_may_be_refport)
00567 {
00568 Method m;
00569 std::string oper2_lcd;
00570 if (fco && fco->isToBeEx())
00571 oper2_lcd = fco->getLValidName();
00572 else if ( fco && fco->getExtedAnc())
00573 oper2_lcd = fco->getExtedAnc()->getLValidName();
00574 else
00575 oper2_lcd = "BON::FCO";
00576
00577 std::string mmm, nnn;
00578
00579 if ( fco_may_be_refport)
00580 {
00581 nnn = indent(s_ind + 0) + "{\n";
00582 nnn += indent(s_ind + 1) + "return ConnectionImpl::getDst();\n";
00583 nnn += indent(s_ind + 0) + "}\n\n\n";
00584
00585 m.m_signature = "getDst()";
00586 m.m_returnValue = "BON::ConnectionEnd";
00587 m.m_implementation = nnn;
00588 m.m_container = conn;
00589 m.m_comment = "getDst() return value is a ConnectionEnd";
00590 }
00591 else
00592 {
00593 mmm = indent(s_ind + 0) + "{\n";
00594 mmm += indent(s_ind + 1) + "BON::ConnectionEnd ce = ConnectionImpl::getDst();\n";
00595 mmm += indent(s_ind + 1) + oper2_lcd + " sp( ce);\n";
00596 mmm += indent(s_ind + 1) + "if ( sp)\n";
00597 mmm += indent(s_ind + 2) + "return sp;\n";
00598 mmm += indent(s_ind + 0) + "\n";
00599 mmm += indent(s_ind + 1) + oper2_lcd + " empty;\n";
00600 mmm += indent(s_ind + 1) + "return empty;\n";
00601 mmm += indent(s_ind + 0) + "}\n\n\n";
00602
00603 m.m_signature = "getDst()";
00604 m.m_returnValue = oper2_lcd;
00605 m.m_implementation = mmm;
00606 m.m_container = conn;
00607 m.m_comment = "getDst() return value is a ConnectionEnd casted to " + oper2_lcd;
00608 }
00609 return m;
00610 }
00611
00612
00613 Method CodeGen::dumpSetGetter( SetRep * cont, const FCO * fco, const std::string& common_kind, bool aggreg , bool dummy_par )
00614 {
00615 ASSERT( fco || ( aggreg && !common_kind.empty()));
00616 std::string retval_kind;
00617
00618 if (fco)
00619 {
00620 retval_kind = fco->getLValidName();
00621
00622 if ( !fco->isToBeEx())
00623 {
00624 FCO * ext_anc = fco->getExtedAnc();
00625 if ( ext_anc)
00626 retval_kind = ext_anc->getLValidName();
00627 else
00628 retval_kind = "BON::" + Any::KIND_TYPE_STR[fco->getMyKind()];
00629 }
00630 }
00631 else if ( !common_kind.empty())
00632 retval_kind = common_kind;
00633 else
00634 ASSERT(0);
00635
00636 Method m;
00637
00638 std::string mmm;
00639 mmm = indent(s_ind + 0) + "{\n";
00640 mmm += indent(s_ind + 1) + "std::set<" + retval_kind + "> res;\n";
00641 mmm += indent(s_ind + 1) + "std::set<BON::FCO> elems = BON::SetImpl::getMembers();\n";
00642 mmm += indent(s_ind + 1) + "std::set<BON::FCO>::iterator elem = elems.begin();\n";
00643 mmm += indent(s_ind + 1) + "for( ; elem != elems.end(); ++elem)\n";
00644 mmm += indent(s_ind + 1) + "{\n";
00645 mmm += indent(s_ind + 2) + retval_kind + " r( *elem);\n";
00646
00647 if ( fco)
00648 {
00649 if ( !aggreg)
00650 {
00651 mmm += indent(s_ind + 2) + "if ( r && r->getObjectMeta().name() == \"" + fco->getLStrictName() + "\")\n";
00652 }
00653 else
00654 {
00655 mmm += indent(s_ind + 2) + "if ( r)\n";
00656 }
00657 }
00658 else
00659 mmm += indent(s_ind + 2) + "if ( r)\n";
00660
00661 mmm += indent(s_ind + 3) + "res.insert( r);\n";
00662 mmm += indent(s_ind + 1) + "}\n";
00663 mmm += indent(s_ind + 1) + "return res;\n";
00664 mmm += indent(s_ind + 0) + "}\n\n\n";
00665
00666 m.m_returnValue = "std::set<" + retval_kind + ">";
00667 m.m_signature = cont->setGetterTemplate( fco) + "(" + (dummy_par?" int dummy":"") + ")";
00668 m.m_implementation = mmm;
00669 m.m_container = cont;
00670 if ( !aggreg)
00671 m.m_comment = "specialized getter for " + fco->getLValidName() + " setmembers";
00672 else
00673 m.m_comment = "aggregated getter for setmembers";
00674
00675 return m;
00676 }
00677
00678
00679