LCOV - code coverage report
Current view: top level - /opt/artdaq/srcs/artdaq-mfextensions/ErrorHandler/MessageAnalyzer - ma_function.h (source / functions) Coverage Total Hit
Test: artdaq.info.cleaned Lines: 0.0 % 11 0
Test Date: 2025-09-04 00:45:34 Functions: 0.0 % 8 0

            Line data    Source code
       1              : #ifndef ERROR_HANDLER_MA_FUNCTION_H
       2              : #define ERROR_HANDLER_MA_FUNCTION_H
       3              : 
       4              : #include <map>
       5              : #include <string>
       6              : #include <vector>
       7              : 
       8              : #include "ErrorHandler/MessageAnalyzer/ma_types.h"
       9              : 
      10              : #include <boost/any.hpp>
      11              : #include <boost/function.hpp>
      12              : 
      13              : namespace novadaq {
      14              : namespace errorhandler {
      15              : 
      16              : class ma_condition;
      17              : 
      18              : typedef std::vector<boost::any> anys_t;
      19              : 
      20              : // base class - all customized fucntions are inherited from it
      21              : class ma_function
      22              : {
      23              : public:
      24            0 :         ma_function() {}
      25            0 :         virtual ~ma_function() {}
      26              : 
      27              :         // evaluate() function gets called when the boolean expression
      28              :         // of the rule is being evaluated.
      29              :         //
      30              :         // param 'cond':
      31              :         //        'cond' is the reference to the basic condition to which
      32              :         //        this user defined function is related. Though this object
      33              :         //        the function can have access to the most recent message
      34              :         //        that triggeres the condition, as well as other historical
      35              :         //        information
      36              :         //
      37              :         // param 'dom':
      38              :         //        when using complex conditions and domain selection clauses
      39              :         //        in the rule expression, a user define function might get
      40              :         //        evaluated multiple times each for a possible source/targets
      41              :         //        domain when a new message comes in. 'dom' contains the domain
      42              :         //        of possible source/target combinations in this evaluation.
      43              :         //        an example would be, cond.get_alarm_count(dom, cond_type)
      44              :         //        returns with the number of triggered source/target pairs
      45              :         //        WITHIN the given domain of a condition.
      46              :         //
      47              :         // return value:
      48              :         //        the return value could be a boolean, an integer, a double,
      49              :         //        or a string object. all of them need to be wrapped in a
      50              :         //        boost::any object before returning to the caller
      51              :         virtual boost::any
      52              :         evaluate(ma_condition const& cond, ma_cond_domain dom) = 0;
      53              : 
      54              :         // a user function is internally implemented by a class, which allows
      55              :         // the function to have states. not surprisingly would the funciton
      56              :         // writers also like to implement a reset method for the purpose of
      57              :         // resetting the state of the user-defined function into its ground
      58              :         // state
      59              :         virtual void
      60            0 :         reset() {}
      61              : 
      62              :         // a user function is allowed to take multiple arguments
      63              :         // other than the condition name that it applies on
      64              :         virtual bool
      65            0 :         parse_arguments(anys_t const& /*args*/) { return true; }
      66              : 
      67              :         // whether the funciton triggers a grouped alarm or
      68              :         // individual alarms with respect to the condition's
      69              :         // source / targets.
      70              :         //
      71              :         // e.g.: a user function COUNT() usually triggers a grouped
      72              :         //       alarm, as we dont necessary need to make distinguish
      73              :         //       between whether it was source 1,2,5, or source 3,7,8
      74              :         //       who trigger the alarm
      75              :         //
      76              :         //       an example of non-grouped alarm is the function of
      77              :         //       OUT_OF_SYNC(). we are interested in who was out of
      78              :         //       sync, and raises alarms for each source
      79              :         virtual bool
      80            0 :         grouped_alarm() { return true; }
      81              : 
      82              : protected:
      83              : private:
      84              : };
      85              : 
      86              : typedef boost::function<ma_function*()> gen_func_t;
      87              : 
      88              : struct ma_function_factory
      89              : {
      90              :         typedef std::map<std::string, gen_func_t> gen_map_t;
      91              : 
      92              : public:
      93              :         static void
      94              :         reg(std::string const& func_name, gen_func_t f);
      95              : 
      96              :         static ma_function*
      97              :         create_instance(std::string const& func_name);
      98              : 
      99              : private:
     100              :         ma_function_factory(){};
     101              : 
     102              :         static gen_map_t&
     103            0 :         get_map()
     104              :         {
     105            0 :                 static gen_map_t map;
     106            0 :                 return map;
     107              :         }
     108              : };
     109              : 
     110              : struct ma_function_maker
     111              : {
     112            0 :         ma_function_maker(std::string const& func_name, gen_func_t f)
     113              :         {
     114            0 :                 ma_function_factory::reg(func_name, f);
     115            0 :         }
     116              : };
     117              : 
     118              : }  // end of namespace errorhandler
     119              : }  // end of namespace novadaq
     120              : 
     121              : // -------------------------------------------------
     122              : // Macro for registering the custom function
     123              : 
     124              : #define REG_MA_FUNCTION(func_name, class_name)                 \
     125              :         ma_function*                                               \
     126              :             class_name##_maker_func() { return new class_name(); } \
     127              :         ma_function_maker                                          \
     128              :             class_name##_maker_func_global_var(#func_name, class_name##_maker_func);
     129              : 
     130              : #endif
        

Generated by: LCOV version 2.0-1