00001 #ifndef DD_DDsvalues_type_h
00002 #define DD_DDsvalues_type_h
00003
00004
00005 #include <ostream>
00006 #include <map>
00007 #include <vector>
00008 #include <algorithm>
00009
00010 #include "DetectorDescription/Core/interface/DDValue.h"
00011
00012
00013
00015
00016
00017
00018
00019 typedef std::vector< std::pair<unsigned int, DDValue> > DDsvalues_type;
00020 typedef DDsvalues_type::value_type DDsvalues_Content_type;
00021
00022
00023
00024 typedef DDsvalues_type::value_type DDsvalues_Content_type;
00025
00026 inline bool operator<(const DDsvalues_Content_type & lh, const DDsvalues_Content_type & rh){
00027 return lh.first < rh.first;
00028 }
00029
00030 inline DDsvalues_type::const_iterator find( DDsvalues_type::const_iterator begin, DDsvalues_type::const_iterator end, unsigned int id) {
00031 static DDValue dummy;
00032 DDsvalues_Content_type v(id,dummy);
00033 DDsvalues_type::const_iterator it = std::lower_bound(begin,end,v);
00034 if (it!=end && (*it).first==id) return it;
00035 return end;
00036 }
00037
00038 inline DDsvalues_type::const_iterator find(DDsvalues_type const & sv, unsigned int id) {
00039 return find(sv.begin(),sv.end(),id);
00040 }
00041
00042
00043
00044 void merge(DDsvalues_type & target, DDsvalues_type const & sv, bool sortit=true );
00045
00046
00048 bool DDfetch(const DDsvalues_type *, DDValue &);
00049
00051 unsigned int DDfetch(const std::vector<const DDsvalues_type *> & sp,
00052 DDValue & toFetch,
00053 std::vector<DDValue> & result);
00054
00055
00056
00057
00058
00059
00060
00061
00062 std::ostream & operator<<(std::ostream & , const DDsvalues_type &);
00063 std::ostream & operator<<(std::ostream & , const std::vector<const DDsvalues_type*> &);
00064
00065 #endif