DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
class_info.hpp
Go to the documentation of this file.
1//
2// DUNE DAQ modification notice:
3// This file has been modified from the original ATLAS genconfig source for the DUNE DAQ project.
4// Fork baseline commit: genconfig-03-10-00 (2021-04-26).
5// Renamed since fork: yes (from src/class_info.h to apps/class_info.hpp).
6//
7
8#ifndef __OKSDALGEN_CLASS_INFO__
9#define __OKSDALGEN_CLASS_INFO__
10
11#include "oks/class.hpp"
12
13#include <map>
14#include <ostream>
15#include <set>
16#include <string>
17
18namespace dunedaq {
19namespace oksdalgen {
20
22{
23
24public:
26 {
27 bool operator()(const oks::OksClass* c1, const oks::OksClass* c2) const { return c1->get_name() < c2->get_name(); }
28 };
29
30 typedef std::map<const oks::OksClass*, ClassInfo, SortByName> Map;
31
33
34 ClassInfo(const std::string& cpp_ns_name, const std::string& dir_prefix)
35 : p_namespace(cpp_ns_name)
36 , p_include_prefix(dir_prefix) {};
37
38 const std::string& get_namespace() const { return p_namespace; }
39 const std::string& get_include_prefix() const { return p_include_prefix; }
40
41private:
42 std::string p_namespace;
43 std::string p_include_prefix;
44};
45
47{
48 std::set<std::string> m_classes;
49 std::map<std::string, NameSpaceInfo> m_nested;
50
51 bool empty() const { return (m_classes.empty() && m_nested.empty()); }
52
53 void add(const std::string& ns_name, const std::string& class_name)
54 {
55 if (!ns_name.empty()) {
56 std::string::size_type idx = ns_name.find_first_of(':');
57 NameSpaceInfo& ns = m_nested[ns_name.substr(0, idx)];
58 if (idx != std::string::npos)
59 ns.add(ns_name.substr(ns_name.find_first_not_of(':', idx)), class_name);
60 else
61 ns.add("", class_name);
62 } else
63 m_classes.insert(class_name);
64 }
65
66 void print(std::ostream& s, int level) const
67 {
68 std::string dx(level * 2, ' ');
69
70 for (const auto& x : m_nested) {
71 s << dx << "namespace " << x.first << " {\n";
72 x.second.print(s, level + 1);
73 s << dx << "}\n";
74 }
75
76 for (const auto& x : m_classes)
77 s << dx << "class " << x << ";\n";
78 }
79};
80
81} // namespace oksdalgen
82} // namespace dunedaq
83#endif
The OKS class.
Definition class.hpp:223
const std::string & get_name() const noexcept
Definition class.hpp:374
ClassInfo(const std::string &cpp_ns_name, const std::string &dir_prefix)
const std::string & get_namespace() const
std::map< const oks::OksClass *, ClassInfo, SortByName > Map
const std::string & get_include_prefix() const
The DUNE-DAQ namespace.
bool operator()(const oks::OksClass *c1, const oks::OksClass *c2) const
void print(std::ostream &s, int level) const
std::map< std::string, NameSpaceInfo > m_nested
std::set< std::string > m_classes
void add(const std::string &ns_name, const std::string &class_name)