47 using FastListConstIterator =
typename std::list<T>::const_iterator;
48 using FastMapIterator =
typename std::multimap<std::string, FastListIterator>::iterator;
49 using FastMapConstIterator =
typename std::multimap<std::string, FastListIterator>::const_iterator;
50 using FastMapIteratorPair = std::pair<FastMapIterator,FastMapIterator>;
51 using FastMapConstIteratorPair = std::pair<FastMapConstIterator,FastMapConstIterator>;
55 template <
typename FastListInputIterator>
57 template <
typename FastListInputIterator>
58 void insert (FastListConstIterator position, FastListInputIterator first,
const FastListInputIterator last);
66 void push_back(
const T& el,
bool unique=
false,
const std::string& objectName=
"element");
76 FastListConstIterator
erase (
const FastListConstIterator position);
77 FastListConstIterator
erase (
const FastListConstIterator first,
const FastListConstIterator last);
84 FastListConstIterator
begin()
const;
85 FastListConstIterator
end()
const;
94 FastListConstIterator
find(std::string name,
unsigned int count=1)
const;
99 FastMapConstIteratorPair
equal_range(std::string name)
const;
109 std::multimap<std::string, FastListIterator>
itsMap;
113 template <
typename T>
114 template <
typename FastListInputIterator>
119 itsMap.insert(std::pair<std::string,FastListIterator>(val.name,it));
123 template <
typename T>
124 template <
typename FastListInputIterator>
125 void FastList<T>::insert(FastListConstIterator position, FastListInputIterator first,
const FastListInputIterator last) {
126 for (;first!=last; ++first) {
132 template <
typename T>
134 FastMapIteratorPair itPair = equal_range(name);
135 if (itPair.first==itPair.second) {
136 std::cerr<<
"current list doesn't contain element "<< name << std::endl;
140 std::vector<FastListIterator> listIterators;
141 for (FastMapIterator it = itPair.first; it != itPair.second; ++it)
144 listIterators.push_back(listIt);
147 itsMap.insert(std::pair<std::string,FastListIterator>(val.name,it));
151 template <
typename T>
154 if (unique && itsMap.find(el.name) != itsMap.end()) {
155 std::cout <<
"ERROR: " << className <<
" with name \"" << el.name <<
"\" already defined." << std::endl;
160 itsMap.insert(std::pair<std::string,FastListIterator>(el.name,it));
163 template <
typename T>
165 return itsList.size();
168 template <
typename T>
174 template <
typename T>
177 for(;it!=end();++it) {
183 template <
typename T>
184 typename FastList<T>::FastListConstIterator
FastList<T>::erase(
const FastList<T>::FastListConstIterator it) {
187 std::string name = (*it).name;
188 if (itsMap.count(name) == 1) {
192 FastMapIteratorPair ret = itsMap.equal_range(name);
193 for (FastMapIterator emit = ret.first; emit!=ret.second; ++emit) {
194 if ((*emit).second == it)
201 return itsList.erase(it);
204 template <
typename T>
205 typename FastList<T>::FastListConstIterator
FastList<T>::erase(
const FastListConstIterator first,
const FastListConstIterator last) {
206 FastListConstIterator it=first;
214 template <
typename T>
216 return itsList.begin();
219 template <
typename T>
221 return itsList.end();
224 template <
typename T>
226 return itsList.begin();
229 template <
typename T>
231 return itsList.end();
234 template <
typename T>
236 return itsMap.equal_range(name);
239 template <
typename T>
241 return itsMap.equal_range(name);
244 template <
typename T>
245 typename FastList<T>::FastListConstIterator
FastList<T>::find(std::string name,
unsigned int count)
const {
247 FastMapConstIterator emit = itsMap.find(name);
248 if (emit==itsMap.end())
return itsList.end();
249 return (*emit).second;
252 FastMapConstIteratorPair ret = itsMap.equal_range(name);
254 for (FastMapConstIterator emit = ret.first; emit!=ret.second; ++emit, i++) {
256 return (*emit).second;
259 return itsList.end();
263 template <
typename T>
266 FastMapIterator emit = itsMap.find(name);
267 if (emit==itsMap.end())
return itsList.end();
273 FastMapIteratorPair ret = itsMap.equal_range(name);
275 for (FastMapIterator emit = ret.first; emit!=ret.second; ++emit, i++) {
282 return itsList.end();
286 template <
typename T>
288 for(FastListConstIterator it=begin();it!=end();++it)
List with Efficient Lookup.
FastListConstIterator end() const
FastListIterator find(std::string name, unsigned int count=1)
std::vector< T > getVector() const
Get a vector version of this list.
void print(int ident=0) const
print method
FastListIterator insert(FastListInputIterator position, const T &val)
template definitions need to be in header
FastMapIteratorPair equal_range(std::string name)
void insert(FastListConstIterator position, FastListInputIterator first, const FastListInputIterator last)
template definitions need to be in header
FastListConstIterator erase(const FastListConstIterator position)
erase elements
FastListConstIterator erase(const FastListConstIterator first, const FastListConstIterator last)
erase elements
void insert_before(const std::string &name, const T &val)
typename std::list< T >::iterator FastListIterator
for ease of reading
FastListConstIterator begin() const
void erase()
erase elements
void push_back(const T &el, bool unique=false, const std::string &objectName="element")
bool empty() const
Whether the list is empty.
FastListConstIterator find(std::string name, unsigned int count=1) const
std::multimap< std::string, FastListIterator > itsMap
multimap for name lookup
int size() const
size of list
Parser namespace for GMAD language. Combination of Geant4 and MAD.