00001 #include "stdafx.h" 00002 #include "SFBonExtension.h" 00003 00004 00005 namespace BON 00006 { 00007 00008 IMPLEMENT_ABSTRACT_BONEXTENSION( SF_BON::Processing ); 00009 IMPLEMENT_BONEXTENSION( SF_BON::Compound, "Compound" ); 00010 IMPLEMENT_BONEXTENSION( SF_BON::Primitive, "Primitive" ); 00011 IMPLEMENT_BONEXTENSION( SF_BON::ParameterBase, " OutputParam" ); 00012 IMPLEMENT_BONEXTENSION( SF_BON::InputParam, "InputParam" ); 00013 IMPLEMENT_BONEXTENSION( SF_BON::Param, "Param" ); 00014 IMPLEMENT_BONEXTENSION( SF_BON::Signal, " InputSignal OutputSignal" ); 00015 00016 00017 }; // end namespace BON 00018 00019 namespace SF_BON 00020 { 00021 //******************************************************************* 00022 // getter for role "InputParameters" among "ParameterBase"s and its descendants 00023 //******************************************************************* 00024 std::set<InputParam> ProcessingImpl::getInputParameters() 00025 { 00026 std::set<InputParam> res; 00027 std::set<BON::FCO> roles = getChildFCOsAs("InputParameters"); 00028 for( std::set<BON::FCO>::iterator i = roles.begin(); i != roles.end(); ++i) 00029 { 00030 InputParam elem(*i); 00031 ASSERT(elem); 00032 res.insert(elem); 00033 } 00034 return res; 00035 } 00036 00037 00038 //******************************************************************* 00039 // getter for role "InputSignals" among "Signal"s and its descendants 00040 //******************************************************************* 00041 std::set<Signal> ProcessingImpl::getInputSignals() 00042 { 00043 std::set<Signal> res; 00044 std::set<BON::FCO> roles = getChildFCOsAs("InputSignals"); 00045 for( std::set<BON::FCO>::iterator i = roles.begin(); i != roles.end(); ++i) 00046 { 00047 Signal elem(*i); 00048 ASSERT(elem); 00049 res.insert(elem); 00050 } 00051 return res; 00052 } 00053 00054 00055 //******************************************************************* 00056 // getter for role "OutputParameters" among "ParameterBase"s and its descendants 00057 //******************************************************************* 00058 std::set<ParameterBase> ProcessingImpl::getOutputParameters() 00059 { 00060 std::set<ParameterBase> res; 00061 std::set<BON::FCO> roles = getChildFCOsAs("OutputParameters"); 00062 for( std::set<BON::FCO>::iterator i = roles.begin(); i != roles.end(); ++i) 00063 { 00064 ParameterBase elem(*i); 00065 ASSERT(elem); 00066 res.insert(elem); 00067 } 00068 return res; 00069 } 00070 00071 00072 //******************************************************************* 00073 // getter for role "OutputSignals" among "Signal"s and its descendants 00074 //******************************************************************* 00075 std::set<Signal> ProcessingImpl::getOutputSignals() 00076 { 00077 std::set<Signal> res; 00078 std::set<BON::FCO> roles = getChildFCOsAs("OutputSignals"); 00079 for( std::set<BON::FCO>::iterator i = roles.begin(); i != roles.end(); ++i) 00080 { 00081 Signal elem(*i); 00082 ASSERT(elem); 00083 res.insert(elem); 00084 } 00085 return res; 00086 } 00087 00088 00089 //******************************************************************* 00090 // getter for role "PC" among "ParameterConn"s 00091 //******************************************************************* 00092 std::set<BON::Connection> ProcessingImpl::getPC() 00093 { 00094 std::set<BON::Connection> res; 00095 std::set<BON::FCO> roles = getChildFCOsAs("PC"); 00096 for( std::set<BON::FCO>::iterator i = roles.begin(); i != roles.end(); ++i) 00097 { 00098 BON::Connection elem(*i); 00099 ASSERT(elem); 00100 res.insert(elem); 00101 } 00102 return res; 00103 } 00104 00105 00106 //******************************************************************* 00107 // getter for role "Parameters" among "ParameterBase"s and its descendants 00108 //******************************************************************* 00109 std::set<Param> ProcessingImpl::getParameters() 00110 { 00111 std::set<Param> res; 00112 std::set<BON::FCO> roles = getChildFCOsAs("Parameters"); 00113 for( std::set<BON::FCO>::iterator i = roles.begin(); i != roles.end(); ++i) 00114 { 00115 Param elem(*i); 00116 ASSERT(elem); 00117 res.insert(elem); 00118 } 00119 return res; 00120 } 00121 00122 00123 //******************************************************************* 00124 // aggregated getter for role "eters" among "ParameterBase"s and its descendants 00125 //******************************************************************* 00126 std::set<ParameterBase> ProcessingImpl::geteters() 00127 { 00128 std::set<ParameterBase> res; 00129 const int len = 3; 00130 std::set<BON::FCO> roles_vec[ len]; 00131 roles_vec[0] = getChildFCOsAs("InputParameters"); 00132 roles_vec[1] = getChildFCOsAs("OutputParameters"); 00133 roles_vec[2] = getChildFCOsAs("Parameters"); 00134 for( int k = 0; k < len; ++k) 00135 for( std::set<BON::FCO>::iterator i = roles_vec[k].begin(); i != roles_vec[k].end(); ++i) 00136 { 00137 ParameterBase elem(*i); 00138 ASSERT(elem); 00139 res.insert(elem); 00140 } 00141 return res; 00142 } 00143 00144 00145 //******************************************************************* 00146 // aggregated getter for role "s" among "Signal"s and its descendants 00147 //******************************************************************* 00148 std::set<Signal> ProcessingImpl::gets() 00149 { 00150 std::set<Signal> res; 00151 const int len = 2; 00152 std::set<BON::FCO> roles_vec[ len]; 00153 roles_vec[0] = getChildFCOsAs("InputSignals"); 00154 roles_vec[1] = getChildFCOsAs("OutputSignals"); 00155 for( int k = 0; k < len; ++k) 00156 for( std::set<BON::FCO>::iterator i = roles_vec[k].begin(); i != roles_vec[k].end(); ++i) 00157 { 00158 Signal elem(*i); 00159 ASSERT(elem); 00160 res.insert(elem); 00161 } 00162 return res; 00163 } 00164 00165 00166 //******************************************************************* 00167 // getter for role "CompoundParts" among "Processing"s and its descendants 00168 //******************************************************************* 00169 std::set<Compound> CompoundImpl::getCompoundParts() 00170 { 00171 std::set<Compound> res; 00172 std::set<BON::FCO> roles = getChildFCOsAs("CompoundParts"); 00173 for( std::set<BON::FCO>::iterator i = roles.begin(); i != roles.end(); ++i) 00174 { 00175 Compound elem(*i); 00176 ASSERT(elem); 00177 res.insert(elem); 00178 } 00179 return res; 00180 } 00181 00182 00183 //******************************************************************* 00184 // getter for role "DFC" among "DataflowConn"s 00185 //******************************************************************* 00186 std::set<BON::Connection> CompoundImpl::getDFC() 00187 { 00188 std::set<BON::Connection> res; 00189 std::set<BON::FCO> roles = getChildFCOsAs("DFC"); 00190 for( std::set<BON::FCO>::iterator i = roles.begin(); i != roles.end(); ++i) 00191 { 00192 BON::Connection elem(*i); 00193 ASSERT(elem); 00194 res.insert(elem); 00195 } 00196 return res; 00197 } 00198 00199 00200 //******************************************************************* 00201 // aggregated getter for role "Parts" among "Processing"s and its descendants 00202 //******************************************************************* 00203 std::set<Processing> CompoundImpl::getParts() 00204 { 00205 std::set<Processing> res; 00206 const int len = 2; 00207 std::set<BON::FCO> roles_vec[ len]; 00208 roles_vec[0] = getChildFCOsAs("CompoundParts"); 00209 roles_vec[1] = getChildFCOsAs("PrimitiveParts"); 00210 for( int k = 0; k < len; ++k) 00211 for( std::set<BON::FCO>::iterator i = roles_vec[k].begin(); i != roles_vec[k].end(); ++i) 00212 { 00213 Processing elem(*i); 00214 ASSERT(elem); 00215 res.insert(elem); 00216 } 00217 return res; 00218 } 00219 00220 00221 //******************************************************************* 00222 // getter for role "PrimitiveParts" among "Processing"s and its descendants 00223 //******************************************************************* 00224 std::set<Primitive> CompoundImpl::getPrimitiveParts() 00225 { 00226 std::set<Primitive> res; 00227 std::set<BON::FCO> roles = getChildFCOsAs("PrimitiveParts"); 00228 for( std::set<BON::FCO>::iterator i = roles.begin(); i != roles.end(); ++i) 00229 { 00230 Primitive elem(*i); 00231 ASSERT(elem); 00232 res.insert(elem); 00233 } 00234 return res; 00235 } 00236 00237 00238 //******************************************************************* 00239 // 00240 //******************************************************************* 00241 PrimitiveImpl::Firing_Type PrimitiveImpl::getFiring() 00242 { 00243 std::string val = FCOImpl::getAttribute("Firing")->getStringValue(); 00244 00245 if ( val == "IFALL") return IFALL_Firing_Type; 00246 else if ( val == "IFANY") return IFANY_Firing_Type; 00247 else throw("None of the possible items"); 00248 } 00249 00250 00251 //******************************************************************* 00252 // 00253 //******************************************************************* 00254 long PrimitiveImpl::getPriority() 00255 { 00256 return FCOImpl::getAttribute("Priority")->getIntegerValue(); 00257 } 00258 00259 00260 //******************************************************************* 00261 // 00262 //******************************************************************* 00263 std::string PrimitiveImpl::getScript() 00264 { 00265 return FCOImpl::getAttribute("Script")->getStringValue(); 00266 } 00267 00268 00269 //******************************************************************* 00270 // 00271 //******************************************************************* 00272 ParameterBaseImpl::DataType_Type ParameterBaseImpl::getDataType() 00273 { 00274 std::string val = FCOImpl::getAttribute("DataType")->getStringValue(); 00275 00276 if ( val == "Integer") return Integer_DataType_Type; 00277 else if ( val == "Double") return Double_DataType_Type; 00278 else if ( val == "Character") return Character_DataType_Type; 00279 else if ( val == "Pointer") return Pointer_DataType_Type; 00280 else throw("None of the possible items"); 00281 } 00282 00283 00284 //******************************************************************* 00285 // 00286 //******************************************************************* 00287 long ParameterBaseImpl::getSize() 00288 { 00289 return FCOImpl::getAttribute("Size")->getIntegerValue(); 00290 } 00291 00292 00293 //******************************************************************* 00294 // 00295 //******************************************************************* 00296 std::string ParamImpl::getInitValue() 00297 { 00298 return FCOImpl::getAttribute("InitValue")->getStringValue(); 00299 } 00300 00301 00302 //******************************************************************* 00303 // 00304 //******************************************************************* 00305 bool ParamImpl::isGlobal() 00306 { 00307 return FCOImpl::getAttribute("Global")->getBooleanValue(); 00308 } 00309 00310 00311 00312 }; // namespace SF_BON 00313