#include #include "elementsCollection.h" #include "elementDrift.h" #include "elementRfgun.h" #include "elementCell.h" #include "elementSoleno.h" #include "elementBend.h" #include "elementBeam.h" elementsCollection::~elementsCollection() { unsigned int k; for(k = 0; k < elements_.size(); k++) { if ( elements_[k] != NULL ) delete elements_[k]; } } void elementsCollection::raz() { unsigned int k; for(k = 0; k < elements_.size(); k++) { if ( elements_[k] != NULL ) delete elements_[k]; } elements_.clear(); } int elementsCollection::size() { return elements_.size(); } abstractElement* elementsCollection::addElement(typedElement elemType) { switch ( elemType ) { case RFgun : { elements_.push_back(new elementRfgun()); break; } case drift : { elements_.push_back(new elementDrift()); break; } case cell : { elements_.push_back(new elementCell()); break; } case soleno : { elements_.push_back(new elementSoleno()); break; } case bend : { elements_.push_back(new elementBend()); break; } case beam : { elements_.push_back(new elementBeam()); break; } default : { cerr << " elementsCollection::addElement : ERROR unknown type of element : " << elemType << endl; return NULL; } } return elements_.back(); } abstractElement* elementsCollection::getElementPointer(string label) const { unsigned int k; for (k = 0; k < elements_.size() ; k++) { if ( elements_[k]->getLabel() == label ) return elements_[k]; } std::cerr << " elementsCollection::getElementPointer() : unknown element label: " << label << std::endl; return NULL; } // un numero va de 1 à l'infini abstractElement* elementsCollection::getElementPointerFromNumero(int num) const { if ( num > elements_.size() || num <= 0) { return NULL; } else { return elements_[num-1]; } } abstractElement* elementsCollection::getElementPointer(unsigned int index) const { if ( index >= elements_.size() ) return NULL; else return elements_[index]; } int elementsCollection::getNumeroFromLabel(string lab) { unsigned int k; int klab = -1; for (k = 0; k < elements_.size() ; k++) { if ( elements_[k]->getLabel() == lab ) { klab = (int)k + 1; break; } } return klab; } void elementsCollection::eraseElement(string label) { abstractElement* ptr = NULL; unsigned int k; for (k = 0; k < elements_.size() ; k++) { if ( elements_[k]->getLabel() == label ) { ptr = elements_[k]; break; } } if(ptr == NULL) { std::cerr << " elementsCollection::eraseElement() : unknown element label: " << label << std::endl; return; } else { vector::iterator j; j= find(elements_.begin(),elements_.end(),ptr); elements_.erase(j--); } }