20 #ifndef __TPIE_PIPELINING_FACTORY_BASE_H__
21 #define __TPIE_PIPELINING_FACTORY_BASE_H__
28 namespace pipelining {
32 virtual void init_node(
node & r) = 0;
42 inline void memory(
double amount) {
47 inline double memory()
const {
57 m_hooks.push_back(hook);
64 for (
size_t i = 0; i < m_hooks.size(); ++i) {
65 other.m_hooks.push_back(m_hooks[i]);
69 inline void init_segment(
node & r)
const {
70 log_fatal() <<
"init_segment has been renamed to init_node" << std::endl;
75 inline void init_node(node & r)
const {
76 if (m_set) r.set_memory_fraction(memory());
77 if (!m_name.empty()) {
78 r.set_name(m_name, m_namePriority);
80 if (!m_breadcrumbs.empty()) {
81 r.set_breadcrumb(m_breadcrumbs);
83 for (
size_t i = 0; i < m_hooks.size(); ++i) {
84 m_hooks[i]->init_node(r);
88 void init_sub_node(node & r)
const {
89 if (m_set) r.set_memory_fraction(memory());
90 if (m_breadcrumbs.empty()) {
94 r.set_breadcrumb(m_name);
98 r.set_breadcrumb(m_breadcrumbs);
100 r.set_breadcrumb(m_breadcrumbs +
" | " + m_name);
103 for (
size_t i = 0; i < m_hooks.size(); ++i) {
104 m_hooks[i]->init_node(r);
108 inline void name(
const std::string & n, priority_type p) {
113 inline void push_breadcrumb(
const std::string & n) {
114 if (m_breadcrumbs.empty()) m_breadcrumbs = n;
115 else m_breadcrumbs = n +
" | " + m_breadcrumbs;
122 std::string m_breadcrumbs;
123 priority_type m_namePriority;
124 std::vector<factory_init_hook *> m_hooks;
131 #endif // __TPIE_PIPELINING_FACTORY_BASE_H__
void hook_initialization(factory_init_hook *hook)
Add a node initialization hook.
Linux TPIE debugging helpers.
void copy_hooks_to(factory_base &other) const
Copy the hooks that have been added to this factory to another.
logstream & log_fatal()
Return logstream for writing fatal log messages.
void backtrace(std::ostream &out, int depth=1024)
Output a function call backtrace for debugging.