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 /**
16 @defgroup count Count
17 
18 @brief Counts number of entries.
19 */
20 
21 namespace ariles2
22 {
23  /// @ingroup count
24  namespace count
25  {
27  {
28  public:
29  Parameters(const bool override_parameters = true) : visitor::Parameters(override_parameters)
30  {
31  }
32  };
33 
34 
36  : public ariles2::visitor::Base<visitor::Visitor, count::Parameters, std::size_t>
37  {
38  public:
40 
41 
42  public:
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  std::size_t visit(const t_Entry &entry, const std::string &, const Parameters &param) const
54  {
55  ARILES2_TRACE_FUNCTION;
56  ARILES2_TRACE_TYPE(entry);
57  return (entry.arilesVirtualVisit(*this, param));
58  }
59  };
60 
61 
62 
64  {
65  public:
66  virtual std::size_t arilesVirtualVisit(const Visitor &, const Visitor::Parameters &) const = 0;
67 
68  virtual const Visitor::Parameters &arilesGetParameters(const Visitor &visitor) const
69  {
70  ARILES2_TRACE_FUNCTION;
71  return (visitor.getDefaultParameters());
72  }
73  };
74 
75 
76 
77 #define ARILES2_NAMED_ENTRY_count(v, entry, name) +1
78 #define ARILES2_PARENT_count(v, entry) +entry::arilesVisit(visitor, parameters)
79 
80 #define ARILES2_VISIT_count \
81  template <class t_Visitor> \
82  std::size_t arilesVisit( \
83  const t_Visitor &visitor, \
84  const typename t_Visitor::Parameters &parameters, \
85  ARILES2_IS_BASE_ENABLER(ariles2::count::Visitor, t_Visitor)) const \
86  { \
87  ARILES2_UNUSED_ARG(visitor); \
88  ARILES2_UNUSED_ARG(parameters); \
89  ARILES2_TRACE_FUNCTION; \
90  return (0 ARILES2_ENTRIES(count)); \
91  }
92 
93 #define ARILES2_METHODS_count \
94  virtual std::size_t arilesVirtualVisit( \
95  const ariles2::count::Visitor &visitor, const ariles2::count::Visitor::Parameters &param) const \
96  { \
97  ARILES2_TRACE_FUNCTION; \
98  return (this->arilesVisit(visitor, param)); \
99  } \
100  using ariles2::count::Base::arilesGetParameters;
101 
102 #define ARILES2_BASE_METHODS_count ARILES2_BASE_METHODS(count)
103  } // namespace count
104 
105 
106  /// @ingroup count
108 } // namespace ariles2
ariles2
Definition: basic.h:16
ariles2::count::Base::arilesGetParameters
virtual const Visitor::Parameters & arilesGetParameters(const Visitor &visitor) const
Definition: count.h:68
ariles2::visitor::Base
Definition: common.h:50
ariles2::count::Base
Definition: count.h:63
ariles2::count::Parameters::Parameters
Parameters(const bool override_parameters=true)
Definition: count.h:29
ariles2::Count
count::Visitor Count
Definition: count.h:107
common.h
ariles2::count::Visitor::Parameters
count::Parameters Parameters
Definition: count.h:39
ariles2::count::Visitor::visit
std::size_t visit(const t_Entry &entry, const std::string &, const Parameters &param) const
Definition: count.h:53
ARILES2_VISIBILITY_ATTRIBUTE
#define ARILES2_VISIBILITY_ATTRIBUTE
Definition: helpers.h:138
ariles2::visitor::Parameters
Definition: common.h:20
ariles2::count::Visitor
Definition: count.h:35
ariles2::count::Visitor::getParameters
const Parameters & getParameters(const t_Ariles &ariles_class) const
Definition: count.h:46
ariles2::visitor::Base::getDefaultParameters
const t_Parameters & getDefaultParameters() const
Definition: common.h:59
ariles2::count::Parameters
Definition: count.h:26