source: PSPA/Interface_Web/trunk/pspaWT/sources/controler/src/sector.cc @ 483

Last change on this file since 483 was 483, checked in by garnier, 10 years ago

Correction d'un bug. La suppression d'un

élément est désormais effective

File size: 3.8 KB
Line 
1//
2//  sector.cpp
3//  PSPA
4//
5//  Created by Garnier Laurent on 10/12/13.
6//  Copyright (c) 2013 Garnier Laurent. All rights reserved.
7//
8
9#include "sector.h"
10
11#include "sectionToExecute.h"
12#include "dataManager.h"
13#include "elementDrift.h"
14#include "elementRfgun.h"
15#include "elementCell.h"
16#include "elementSoleno.h"
17#include "elementBend.h"
18#include "elementBeam.h"
19#include "elementFit.h"
20#include "elementSnapshot.h"
21#include "elementMultipole.h"
22
23sector::sector(dataManager* data, std::string name):
24reflected_(false),
25duplicatedFrom_(NULL),
26repetitionNumber_(1),
27currentBeam_(NULL),
28name_(name),
29dataManager_(data),
30sectorParam_(this)
31{
32 
33}
34
35sector::~sector()  {
36}
37
38abstractElement* sector::addElementAfter(nomdElements::typedElement eType ,abstractElement* previousElement){
39
40  // create a new abstractElement
41  // FIXME : To be move in an abstractFactory in the controler !!
42  abstractElement* currentElement = NULL;
43  switch (  eType ) {
44    case nomdElements::RFgun :
45      currentElement = new elementRfgun();
46      break;
47    case nomdElements::drift :
48      currentElement = new elementDrift();
49      break;
50    case nomdElements::cell  :
51      currentElement = new elementCell();
52      break;
53    case nomdElements::bend  :
54      currentElement = new elementBend();
55      break;
56    case nomdElements::soleno  :
57      currentElement = new elementSoleno();
58      break;
59    case nomdElements::beam  :
60      currentElement = new elementBeam();
61      break;
62    case nomdElements::fit  :
63      currentElement = new elementFit();
64      break;
65    case nomdElements::mpole  :
66      currentElement = new elementMultipole();
67      break;
68    case nomdElements::snapshot :
69    {
70      // FIXME : Snapshot a gérér
71      /*        int incr = dataManager_->getPspaApplication()->getExtensionFile();
72       incr++;
73       dataManager_->getPspaApplication()->setExtensionFile(incr);
74       */
75      currentElement = new elementSnapshot();
76      break;
77    }
78  }
79  if (!currentElement) {
80    return NULL;
81  }
82  addElementAfter(currentElement,previousElement);
83  return currentElement;
84 
85}
86
87
88void sector::addElementAfter(abstractElement* currentElement ,abstractElement* previousElement){
89// if the previous element is NULL, it will try to add at the beginning of the first section
90 
91  if (previousElement == NULL) {
92    if (sectionToExecute_.size() == 0) {
93      sectionToExecute_.push_back(new sectionToExecute(currentElement,NULL,dataManager_,this));
94    } else {
95        sectionToExecute* section = sectionToExecute_.front();
96      section->insertAtFirst(currentElement);
97    }
98  } else {
99 
100    for (unsigned int i=0; i<sectionToExecute_.size(); i++) {
101      sectionToExecute* section = sectionToExecute_[i];
102      if (section->insertAfter(previousElement,currentElement)) {
103        return;
104      }
105    }
106  }
107}
108
109void sector::removeElement(abstractElement* currentElement) {
110  if (currentElement == NULL) return;
111 
112  for (unsigned int i=0; i<sectionToExecute_.size(); i++) {
113    sectionToExecute* section = sectionToExecute_[i];
114   
115    if (section->isInside(currentElement)) {
116      section->removeElement(currentElement);
117    }
118  }
119}
120
121
122void sector::clearSectionToExecute()
123{
124  unsigned k;
125  for(k = 0; k < sectionToExecute_.size(); k++)
126  {
127    if ( sectionToExecute_[k] != NULL ) clearSectionToExecute(k);
128  }
129  sectionToExecute_.clear();
130}
131
132void sector::clearSectionToExecute(int a)
133{
134  cout << " dataManager::clearSectionToExecute : effacement de la section d'index = " << a << endl;
135  if (a < 0) return;
136  if (a >= (int)sectionToExecute_.size()) return;
137 
138  // lors de la creation de la section on a fait un 'new' d'un
139  // softwareXXXX : on fait ici le 'delete'
140 
141  const abstractSoftware* soft = sectionToExecute_.at(a)->getSoftware();
142  if ( soft != NULL ) delete soft;
143  delete sectionToExecute_[a];
144  sectionToExecute_.erase (sectionToExecute_.begin()+a);
145}
Note: See TracBrowser for help on using the repository browser.