Bitstream Interpretation Library (BIL)  0.1
V5AddressLayoutRegistry.cpp
Go to the documentation of this file.
1 
6 #include <iterator>
9 
10 using namespace bil;
11 
12 
14  m_idMap()
15 {
16 
17 }
18 
19 
21 {
22  // check if ID is already in use
23  const IDMap_t::iterator lbID = m_idMap.lower_bound(deviceID);
24  if ((m_idMap.end() != lbID) && (deviceID == lbID->first)) throw Exception();
25  // insert address layout into map
26  m_idMap.insert(lbID, std::make_pair(deviceID, layout));
27 }
28 
29 
31 {
32  // search given ID in name map
33  const IDMap_t::iterator itID = m_idMap.find(deviceID);
34  if (m_idMap.end() == itID) return false;
35  // delete entry from map
36  m_idMap.erase(itID);
37  return true;
38 }
39 
40 
42 {
43  m_idMap.clear();
44 }
45 
46 
48 {
49  return m_idMap.size();
50 }
51 
52 
54 {
55  // check if index is in valid range
56  if (m_idMap.size() <= index) throw Exception();
57  // get map entry at index
58  IDMap_t::iterator it = m_idMap.begin();
59  std::advance(it, index);
60  return *it;
61 }
62 
63 
65 {
66  // check if index is in valid range
67  if (m_idMap.size() <= index) throw Exception();
68  // get map entry at index
69  IDMap_t::const_iterator it = m_idMap.begin();
70  std::advance(it, index);
71  return *it;
72 }
73 
74 
76 {
77  // search for ID in map
78  const IDMap_t::iterator it = m_idMap.find(deviceID);
79  // if found, return pointer to associated layout, else return 0
80  if (m_idMap.end() == it) return 0;
81  return &(it->second);
82 }
83 
84 
86 {
87  // search for ID in map
88  const IDMap_t::const_iterator it = m_idMap.find(deviceID);
89  // if found, return const pointer to associated layout, else return 0
90  if (m_idMap.end() == it) return 0;
91  return &(it->second);
92 }