OPALX (Object Oriented Parallel Accelerator Library for Exascal) master (dc2a29eed580)
OPALX
Loading...
Searching...
No Matches
PlaceRep.cpp
Go to the documentation of this file.
1// ------------------------------------------------------------------------
2// $RCSfile: PlaceRep.cpp,v $
3// ------------------------------------------------------------------------
4// $Revision: 1.1.1.1 $
5// ------------------------------------------------------------------------
6// Copyright: see Copyright.readme
7// ------------------------------------------------------------------------
8//
9// Class: PlaceRep
10// A class used to represent a place specification.
11//
12// ------------------------------------------------------------------------
13//
14// $Date: 2000/03/27 09:33:34 $
15// $Author: Andreas Adelmann $
16//
17// ------------------------------------------------------------------------
18
24
25// Class PlaceRep
26// ------------------------------------------------------------------------
27
28PlaceRep::PlaceRep() : data(), is_selected(false) { initialize(); }
29
30PlaceRep::PlaceRep(const PlaceRep& rhs) : data(rhs.data), is_selected(rhs.is_selected) {
31 initialize();
32}
33
34PlaceRep::PlaceRep(const std::string& def) : data(), is_selected(def == "SELECTED") {
35 append(def, 1);
36 initialize();
37}
38
40
42 data = rhs.data;
43 initialize();
44 return *this;
45}
46
47void PlaceRep::append(const std::string& name, int occur) {
48 data.push_back(std::make_pair(name, occur));
49}
50
52 status = false;
53 seen = 0;
54}
55
56void PlaceRep::enter(const FlaggedElmPtr& fep) const {
57 const std::string& name = fep.getElement()->getName();
58 const int occur = fep.getCounter();
59
60 if (seen < data.size() && name == data[seen].first && occur == data[seen].second) {
61 ++seen;
62 }
63
64 if (seen == data.size()) status = true;
65}
66
67void PlaceRep::leave(const FlaggedElmPtr& fep) const {
68 const std::string& name = fep.getElement()->getName();
69 const int occur = fep.getCounter();
70
71 if (seen > 0 && name == data[seen - 1].first && occur == data[seen - 1].second) {
72 --seen;
73 }
74
75 if (seen < data.size()) status = false;
76}
77
78bool PlaceRep::isActive() const { return status; }
79
80bool PlaceRep::isSelected() const { return is_selected; }
81
82void PlaceRep::print(std::ostream& os) const {
83 if (data.empty()) {
84 os << "#S";
85 } else {
86 os << data[0].first;
87 if (data[0].second > 0) os << '[' << data[0].second << ']';
88
89 for (Data::size_type i = 1; i < data.size(); ++i) {
90 os << "::" << data[i].first;
91 if (data[i].second) os << '[' << data[i].second << ']';
92 }
93 }
94
95 return;
96}
virtual const std::string & getName() const
Get element name.
ElementBase * getElement() const
Get the element pointer.
Definition ElmPtr.h:56
A section of a beam line.
int getCounter() const
Get clone counter.
Representation of a place within a beam line or sequence.
Definition PlaceRep.h:40
bool isActive() const
Return status.
Definition PlaceRep.cpp:78
void print(std::ostream &os) const
Print in input format.
Definition PlaceRep.cpp:82
bool status
Definition PlaceRep.h:90
Data data
Definition PlaceRep.h:84
void initialize()
Initialise data for search.
Definition PlaceRep.cpp:51
PlaceRep()
Default constructor.
Definition PlaceRep.cpp:28
bool is_selected
Definition PlaceRep.h:87
void enter(const FlaggedElmPtr &) const
Enter an element or line.
Definition PlaceRep.cpp:56
Data::size_type seen
Definition PlaceRep.h:93
bool isSelected() const
Return select flag.
Definition PlaceRep.cpp:80
void append(const std::string &, int occur)
Add a name/occurrence pair.
Definition PlaceRep.cpp:47
const PlaceRep & operator=(const PlaceRep &)
Definition PlaceRep.cpp:41
void leave(const FlaggedElmPtr &) const
Leave an element or line.
Definition PlaceRep.cpp:67