void Place::merge(Place* placeToMerge) // CB copie améliorée de Transition::merge, à descendre dans PetriNetNode ? { arcList mergeInGoingArcs = placeToMerge->inGoingArcsOf(); // CB vector arcList mergeOutGoingArcs = placeToMerge->outGoingArcsOf(); // CB vector for (arcList::iterator it = mergeInGoingArcs.begin() ; it != mergeInGoingArcs.end() ; it++) { Arc* newArc = getPetriNet()->createArc(dynamic_cast<Transition*>((*it)->getFrom()), this); // CB uncheck cast newArc->changeAbsoluteTime((*it)->getAbsoluteMinValue(), (*it)->getAbsoluteMaxValue()); newArc->changeRelativeTime((*it)->getRelativeMinValue(), (*it)->getRelativeMaxValue()); getPetriNet()->deleteArc((*it)->getFrom(), placeToMerge); } // CB Arc::Arc adds the arc in the nodes' lists for (arcList::iterator it = mergeOutGoingArcs.begin() ; it != mergeOutGoingArcs.end() ; it++) { Arc* newArc = getPetriNet()->createArc(this, dynamic_cast<Transition*>((*it)->getTo())); newArc->changeAbsoluteTime((*it)->getAbsoluteMinValue(), (*it)->getAbsoluteMaxValue()); newArc->changeRelativeTime((*it)->getRelativeMinValue(), (*it)->getRelativeMaxValue()); getPetriNet()->deleteArc(placeToMerge, (*it)->getTo()); } // CB Arc::Arc adds the arc in the nodes' lists }
void Transition::merge(Transition* transitionToMerge) { for (unsigned int i = 0 ; i < transitionToMerge->m_externActions.size() ; ++i) { m_externActions.push_back(transitionToMerge->m_externActions[i]); } arcList mergeInGoingArcs = transitionToMerge->inGoingArcsOf(); arcList mergeOutGoingArcs = transitionToMerge->outGoingArcsOf(); for (unsigned int i = 0; i < mergeInGoingArcs.size() ; ++i) { Arc* currentArc = mergeInGoingArcs[i]; ExtendedInt relativeMinValue = currentArc->getRelativeMinValue(); ExtendedInt relativeMaxValue = currentArc->getRelativeMaxValue(); ExtendedInt absoluteMinValue = currentArc->getAbsoluteMinValue(); ExtendedInt absoluteMaxValue = currentArc->getAbsoluteMaxValue(); Place* inGoingPlace = (Place*) currentArc->getFrom(); Arc* newArc = getPetriNet()->createArc(inGoingPlace, this); newArc->changeAbsoluteTime(absoluteMinValue, absoluteMaxValue); newArc->changeRelativeTime(relativeMinValue, relativeMaxValue); getPetriNet()->deleteArc(inGoingPlace, transitionToMerge); } createBitArray(); for (unsigned int i = 0; i < mergeOutGoingArcs.size() ; ++i) { Arc* currentArc = mergeOutGoingArcs[i]; Place* outGoingPlace = (Place*) currentArc->getTo(); getPetriNet()->createArc(this, outGoingPlace); getPetriNet()->deleteArc(transitionToMerge, outGoingPlace); } }