#include "computingBlock.h"
#include "mixedTools.h"
#include "softwareUnknown.h"
#include "expandedMachine.h"
computingBlock::computingBlock(unsigned premier, unsigned nombre, abstractSoftware* s,expandedMachine* mch) {
// dataManager_ = dtmg;
machine_ = mch;
if ( premier >= machine_->numberOfElements() ) {
rankOfFirstElement_ = 0;
numberOfelements_ = 0;
} else {
rankOfFirstElement_ = premier;
if ( nombre < machine_->numberOfElements() - rankOfFirstElement_ +1 ) {
numberOfelements_ = nombre;
} else numberOfelements_ = machine_->numberOfElements() - rankOfFirstElement_ +1;
}
if (s == NULL) {
software_ = new softwareUnknown();
} else {
software_ = s;
}
}
void computingBlock::FileAMLOutput(UAPNode* root)
{
UAPNode* node = root->addChild("computingBlock");
node->addChild("software")->addAttribute("name",software_->getName());
unsigned noElem = rankOfFirstElement_;
UAPNode* blocNode = node->addChild("blocExtension");
blocNode->addAttribute("rankOfFirstElement",mixedTools::intToString(int(rankOfFirstElement_)));
blocNode->addAttribute("numberOfelements",mixedTools::intToString(int(numberOfelements_)));
}
void computingBlock::FileAMLInput( UAPNode* entree) {
string soft;
AMLtools::readAMLParameterAttribut(entree, "software", "name", soft);
software_ = machine_->getSoftwarePointer(soft, this);
int premier, nombre;
AMLtools::readAMLParameterAttribut(entree, "blocExtension", "rankOfFirstElement", premier);
AMLtools::readAMLParameterAttribut(entree, "blocExtension", "numberOfelements", nombre);
rankOfFirstElement_ = premier;
numberOfelements_ = nombre;
if ( !checkCompatibilityWithMachine() ) {
rankOfFirstElement_ = 0;
numberOfelements_ = 0;
cout << " computingBlock::FileAMLInput ERREUR lecture " << endl;
}
}
bool computingBlock::checkCompatibilityWithMachine() {
if ( !machine_ ) return false;
if ( rankOfFirstElement_ > machine_->numberOfElements() ) return false;
if ( numberOfelements_ > machine_->numberOfElements() - rankOfFirstElement_ + 1 ) return false;
return true;
}
bool computingBlock::checkCoherence(string& diagnosticErrors, string& diagnosticWarnings) {
cout << " computingBlock::checkCoherence() " << endl;
bool caMarche = true;
const nomDeLogiciel* prog = software_->getNomDeLogiciel();
for(unsigned k =0 ; k < numberOfelements_; k++)
{
abstractElement* elem = machine_->getElementPointer(rankOfFirstElement_ + k);
trivaluedBool tb = prog->doAcceptElement(elem->getNomdElement().getElementType());
cout << " GWt_softwarePanel::areDataCoherent() el " << elem->getLabel() << " tb= " << tb << endl;
if (tb != TBoolOk ) {
if (tb == TBoolIgnore) {
if(prog->getString() != "unknownSoftware") diagnosticWarnings += elem->getLabel() + " will be ignored by "+ prog->getString() + "
";
cout << " element " << elem->getLabel() << " ignore " << endl;
} else {
diagnosticErrors += elem->getNomdElement().getExpandedName() + " is not allowed with " + prog->getString() + "
";
cout << " element " << elem->getLabel() << " REFUSE " << endl;
caMarche = false;
}
}
} //k
return caMarche;
}
// vector< abstractElement* > computingBlock::getElements() {
// vector< abstractElement* > elems;
// for (unsigned k=0; k < numberOfelements_; k++ ) {
// elems.push_back( machine_->getElementPointer( rankOfFirstElement_ + k));
// }
// return elems;
// }
abstractElement* computingBlock::getFirstElement() {
return machine_->getElementPointer( rankOfFirstElement_);
}
abstractElement* computingBlock::getLastElement() {
cout << " computingBlock::getLastElement() premier " << machine_->getElementPointer( rankOfFirstElement_)->getLabel() << endl;
cout << " nb elements : " << numberOfelements_ << endl;
cout << " computingBlock::getLastElement() dernier " << machine_->getElementPointer( rankOfFirstElement_ + numberOfelements_ - 1)->getLabel() << endl;
return machine_->getElementPointer( rankOfFirstElement_ + numberOfelements_ - 1);
}
abstractElement* computingBlock::getElement(unsigned ind) { return machine_->getElementPointer( rankOfFirstElement_ + ind); }