OdbDesignLib
OdbDesign ODB++ Parsing Library
AttributeLookupTable.cpp
1 #include "AttributeLookupTable.h"
2 #include <sstream>
3 
4 namespace Odb::Lib::FileModel::Design
5 {
6  const std::map<std::string, std::string>& AttributeLookupTable::GetAttributeLookupTable() const
7  {
8  return m_attributeLookupTable;
9  }
10 
11  bool AttributeLookupTable::ParseAttributeLookupTable(const std::string& attributeLookupTableString)
12  {
13  std::stringstream ss(attributeLookupTableString);
14  std::string token;
15 
16  // attributes
17  if (std::getline(ss, token, ';'))
18  {
19  std::string attributeAssignment;
20  while (std::getline(ss, attributeAssignment, ','))
21  {
22  if (!attributeAssignment.empty())
23  {
24  std::string name;
25  std::string value;
26 
27  std::stringstream aa_ss(attributeAssignment);
28  if (attributeAssignment.find("=") != std::string::npos)
29  {
30  if (!std::getline(aa_ss, name, '=')) return false;
31  if (!std::getline(aa_ss, value)) return false;
32  }
33  else
34  {
35  if (!std::getline(aa_ss, name)) return false;
36  }
37 
38  m_attributeLookupTable[name] = value;
39  }
40  }
41  }
42 
43  // ID
44  if (std::getline(ss, token, ';'))
45  {
46  std::string name;
47  std::string value;
48 
49  std::stringstream token_ss(token);
50  if (token.find("=") != std::string::npos)
51  {
52  if (!std::getline(token_ss, name, '=')) return false;
53  if (!std::getline(token_ss, value)) return false;
54  }
55 
56  m_attributeLookupTable[name] = value;
57  }
58 
59  return true;
60  }
61 }