DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
class_info.hpp
Go to the documentation of this file.
1#ifndef __OKSDALGEN_CLASS_INFO__
2#define __OKSDALGEN_CLASS_INFO__
3
4#include "oks/class.hpp"
5
6#include <map>
7#include <ostream>
8#include <set>
9#include <string>
10
11namespace dunedaq {
12namespace oksdalgen {
13
14class ClassInfo {
15
16 public:
17
18 struct SortByName {
19 bool operator() (const oks::OksClass * c1, const oks::OksClass * c2) const {
20 return c1->get_name() < c2->get_name();
21 }
22 };
23
24 typedef std::map<const oks::OksClass *, ClassInfo, SortByName> Map;
25
27
28 ClassInfo(const std::string& cpp_ns_name, const std::string& dir_prefix) :
29 p_namespace (cpp_ns_name), p_include_prefix (dir_prefix) {};
30
31 const std::string& get_namespace() const {return p_namespace;}
32 const std::string& get_include_prefix() const {return p_include_prefix;}
33
34
35 private:
36
37 std::string p_namespace;
38 std::string p_include_prefix;
39
40};
41
43{
44 std::set<std::string> m_classes;
45 std::map<std::string, NameSpaceInfo> m_nested;
46
47 bool
48 empty() const
49 {
50 return (m_classes.empty() && m_nested.empty());
51 }
52
53 void
54 add(const std::string &ns_name, const std::string &class_name)
55 {
56 if (!ns_name.empty())
57 {
58 std::string::size_type idx = ns_name.find_first_of(':');
59 NameSpaceInfo &ns = m_nested[ns_name.substr(0, idx)];
60 if (idx != std::string::npos)
61 ns.add(ns_name.substr(ns_name.find_first_not_of(':', idx)), class_name);
62 else
63 ns.add("", class_name);
64 }
65 else
66 m_classes.insert(class_name);
67 }
68
69 void
70 print(std::ostream &s, int level) const
71 {
72 std::string dx(level * 2, ' ');
73
74 for (const auto &x : m_nested)
75 {
76 s << dx << "namespace " << x.first << " {\n";
77 x.second.print(s, level + 1);
78 s << dx << "}\n";
79 }
80
81 for (const auto &x : m_classes)
82 s << dx << "class " << x << ";\n";
83 }
84};
85
86} // namespace oksdalgen
87} // namespace dunedaq
88#endif
The OKS class.
Definition class.hpp:200
const std::string & get_name() const noexcept
Definition class.hpp:363
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
Including Qt Headers.
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)