BornAgain  1.19.79
Open-source research software to simulate and fit neutron and x-ray reflectometry and grazing-incidence small-angle scattering
ComponentKeyHandler Class Reference

Description

Stores INode instances, associates them with given tag, and provides unique keys.

Definition at line 31 of file ComponentKeyHandler.h.

Collaboration diagram for ComponentKeyHandler:
[legend]

Public Member Functions

void insertModel (const std::string &tag, const INode *s)
 
std::string obj2key (const INode *s) const
 
template<class T >
std::vector< const T * > objectsOfType () const
 

Private Attributes

std::map< std::string, std::vector< const INode * > > m_objects
 

Member Function Documentation

◆ insertModel()

void ComponentKeyHandler::insertModel ( const std::string &  tag,
const INode s 
)

Definition at line 20 of file ComponentKeyHandler.cpp.

21 {
22  m_objects[tag].emplace_back(s);
23 }
std::map< std::string, std::vector< const INode * > > m_objects

References m_objects.

◆ obj2key()

std::string ComponentKeyHandler::obj2key ( const INode s) const

Definition at line 25 of file ComponentKeyHandler.cpp.

26 {
27  for (const auto& it : m_objects) {
28  const std::vector<const INode*>& v = it.second;
29  const auto vpos = std::find(v.begin(), v.end(), s);
30  if (vpos == std::end(v))
31  continue;
32  const std::string& tag = it.first;
33  if (v.size() == 1)
34  return tag;
35  return tag + "_" + std::to_string(vpos - v.begin() + 1);
36  }
37  throw std::runtime_error("BUG: object not found in ComponentKeyHandler");
38 }

References m_objects.

◆ objectsOfType()

template<class T >
std::vector< const T * > ComponentKeyHandler::objectsOfType

Definition at line 44 of file ComponentKeyHandler.h.

45 {
46  std::vector<const T*> result;
47  for (const auto& it : m_objects)
48  for (const INode* s : it.second)
49  if (const auto* c = dynamic_cast<const T*>(s); c)
50  result.emplace_back(c);
51  return result;
52 }
Base class for tree-like structures containing parameterized objects.
Definition: INode.h:40

References m_objects.

Member Data Documentation

◆ m_objects

std::map<std::string, std::vector<const INode*> > ComponentKeyHandler::m_objects
private

Definition at line 40 of file ComponentKeyHandler.h.

Referenced by insertModel(), obj2key(), and objectsOfType().


The documentation for this class was generated from the following files: