CMS 3D CMS Logo

DDsvalues.cc
Go to the documentation of this file.
2 
3 #include<iostream>
4 
5 void merge(DDsvalues_type & target, DDsvalues_type const & sv, bool sortit /* =true */)
6 {
7  if (target.empty()) {
8  target = sv;
9  return;
10  }
11  DDsvalues_type::const_iterator sit = sv.begin();
12  DDsvalues_type::const_iterator sed = sv.end();
13  // fast merge
14  if (target.back()<sv.front()) {
15  target.insert(target.end(),sit,sed);
16  return;
17  }
18  if (sv.back()<target.front()) {
19  target.insert(target.begin(),sit,sed);
20  return;
21  }
22  {
23  DDsvalues_type::iterator it = std::lower_bound(target.begin(),target.end(),sv.front());
24  if (it == std::lower_bound(target.begin(),target.end(),sv.back())) {
25  target.insert(it,sit,sed);
26  return;
27  }
28  }
29  // it nevers arrives here...
30  target.reserve(target.size()+sv.size());
31  DDsvalues_type::const_iterator ted = target.end();
32  for (; sit != sed; ++sit) {
33  DDsvalues_type::const_iterator it = find(target.begin(),ted, (*sit).first);
34  if (it!=ted) const_cast<DDsvalues_Content_type&>(*it).second = (*sit).second;
35  else target.emplace_back(*sit);
36  }
37  if (sortit) std::sort(target.begin(),target.end());
38 }
39 
40 
41 std::ostream & operator<<(std::ostream & os , const DDsvalues_type & s)
42 {
43  DDsvalues_type::const_iterator it = s.begin();
44  for(; it != s.end(); ++it) {
45  os << it->second;
46  /*
47  os << DDValue(it->first).name() << " = ";
48  for (unsigned int i=0; i<it->second.size(); ++i) {
49  os << it->second[i] << ' ';
50  }
51  os << std::endl;
52  */
53  }
54  return os;
55 }
56 
57 
58 std::ostream & operator<<(std::ostream & os , const std::vector<const DDsvalues_type*> & v)
59 {
60  for (const auto & i : v) {
61  os << *i; // << std::endl;
62  }
63 
64  return os;
65 }
66 
81 bool DDfetch(const DDsvalues_type * p, DDValue & v)
82 {
83  bool result = false;
84  DDsvalues_type::const_iterator it = find(*p, v);
85  if (it != p->end()) {
86  result = true;
87  v = it->second;
88  }
89  return result;
90 }
91 
92 
93 unsigned int DDfetch(const std::vector<const DDsvalues_type *> & sp, DDValue & toFetch, std::vector<DDValue> & result)
94 {
95  unsigned int count = 0;
96  for( const auto & it : sp ) {
97  if (DDfetch( it, toFetch)) {
98  result.emplace_back(toFetch);
99  ++count;
100  }
101  }
102  return count;
103 }
DDsvalues_type::value_type DDsvalues_Content_type
Definition: DDsvalues.h:13
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:20
void merge(DDsvalues_type &target, DDsvalues_type const &sv, bool sortit)
Definition: DDsvalues.cc:5
std::ostream & operator<<(std::ostream &os, const DDsvalues_type &s)
Definition: DDsvalues.cc:41
std::vector< std::pair< unsigned int, DDValue > > DDsvalues_type
Definition: DDsvalues.h:12
bool DDfetch(const DDsvalues_type *p, DDValue &v)
helper for retrieving DDValues from DDsvalues_type *.
Definition: DDsvalues.cc:81