Ariles
count.h
Go to the documentation of this file.
1 /**
2  @file
3  @author Alexander Sherikov
4 
5  @copyright 2017-2020 Alexander Sherikov, Licensed under the Apache License, Version 2.0.
6  (see @ref LICENSE or http://www.apache.org/licenses/LICENSE-2.0)
7 
8  @brief
9 */
10 
11 #pragma once
12 
13 #include "common.h"
14 
15 namespace ariles
16 {
17  namespace count
18  {
20  {
21  };
22 
23 
24  class ARILES_VISIBILITY_ATTRIBUTE Visitor : public ariles::visitor::Base<count::Parameters>
25  {
26  public:
28 
29 
30  public:
31  std::size_t counter_;
32  bool descend_;
33 
34 
35  public:
37  {
38  counter_ = 0;
39  descend_ = false;
40  }
41 
42 
44 
45  template <class t_Ariles>
46  const Parameters &getParameters(const t_Ariles &ariles_class) const
47  {
48  return (ariles_class.arilesGetParameters(*this));
49  }
50 
51 
52  template <class t_Entry>
53  void start(
54  const t_Entry &entry,
55  const std::string &name,
56  const Parameters &param,
58  {
60  counter_ = 0;
61  descend_ = true;
62  this->operator()(entry, name, param);
63  }
64 
65 
66  template <class t_Entry>
67  void operator()(
68  const t_Entry &entry,
69  const std::string &name,
70  const Parameters & /*param*/,
72  {
73  ARILES_UNUSED_ARG(name);
74  ARILES_UNUSED_ARG(entry);
76  ARILES_TRACE_ENTRY(name);
77  ARILES_TRACE_TYPE(entry);
78  ++this->counter_;
79  }
80 
81 
82  template <class t_Entry>
83  void operator()(
84  const t_Entry &entry,
85  const std::string &name,
86  const Parameters &param,
88  {
89  ARILES_UNUSED_ARG(name);
91  ARILES_TRACE_ENTRY(name);
92  ARILES_TRACE_TYPE(entry);
93  if (true == this->descend_)
94  {
95  this->descend_ = false;
96  entry.arilesVirtualVisit(*this, param);
97  }
98  else
99  {
100  ++this->counter_;
101  }
102  }
103  };
104 
105 
106 
107  class ARILES_VISIBILITY_ATTRIBUTE Base : public entry::ConstBase<count::Visitor>
108  {
109  public:
110  };
111 
112 #ifndef ARILES_METHODS_count
113 # define ARILES_METHODS_count ARILES_METHODS(count, ARILES_EMPTY_MACRO, const)
114 #endif
115  } // namespace count
116 
117 
119 } // namespace ariles
const Parameters & getParameters(const t_Ariles &ariles_class) const
Definition: count.h:46
#define ARILES_TRACE_FUNCTION
Definition: trace.h:118
void operator()(const t_Entry &entry, const std::string &name, const Parameters &param, ARILES_IS_BASE_ENABLER(entry::ConstBase< count::Visitor >, t_Entry))
Definition: count.h:83
#define ARILES_IS_BASE_ENABLER(Base, Derived)
Definition: helpers.h:48
void start(const t_Entry &entry, const std::string &name, const Parameters &param, ARILES_IS_BASE_ENABLER(entry::ConstBase< count::Visitor >, t_Entry))
Definition: count.h:53
#define ARILES_TRACE_TYPE(entry)
Definition: trace.h:120
void operator()(const t_Entry &entry, const std::string &name, const Parameters &, ARILES_IS_BASE_DISABLER(entry::ConstBase< count::Visitor >, t_Entry))
Definition: count.h:67
count::Parameters Parameters
Definition: count.h:27
count::Visitor Count
Definition: count.h:118
#define ARILES_IS_BASE_DISABLER(Base, Derived)
Definition: helpers.h:51
std::size_t counter_
Definition: count.h:31
#define ARILES_VISIBILITY_ATTRIBUTE
Definition: helpers.h:69
#define ARILES_TRACE_ENTRY(entry_name)
Definition: trace.h:119
Definition: basic.h:17