MADARA  3.4.1
PrefixIntConvert.h
Go to the documentation of this file.
1 
2 
3 #ifndef _MADARA_FILTERS_PREFIX_INTCONVERT_H_
4 #define _MADARA_FILTERS_PREFIX_INTCONVERT_H_
5 
13 #include <sstream>
14 
15 #include "AggregateFilter.h"
17 #include "madara/utility/Utility.h"
18 
19 namespace madara
20 {
21 namespace filters
22 {
28 {
29 public:
38  PrefixIntConvert(const std::vector<std::string>& source_prefixes = {},
40  : value(new_value), prefixes(source_prefixes)
41  {
42  }
43 
47  virtual ~PrefixIntConvert() = default;
48 
53  inline virtual void filter(knowledge::KnowledgeMap& records,
55  {
56  // because of the usage of erase, don't auto inc record in for loop
57  for (auto record : records)
58  {
59  // check for valid prefix
60  bool accepted_prefix = false;
61 
62  if (prefixes.size() > 0)
63  {
64  for (auto prefix : prefixes)
65  {
66  if (utility::begins_with(record.first, prefix))
67  {
68  accepted_prefix = true;
69  }
70  }
71  }
72  else
73  {
74  accepted_prefix = true;
75  }
76 
77  // if not valid, remove the record and update iterator
78  if (!accepted_prefix)
79  {
82  "PrefixIntConvert::filter: "
83  "not integerizing variable %s\n",
84  record.first.c_str())
85  } // end not valid prefix
86  else
87  {
88  // valid prefix so set the value
89  record.second = value;
90  } // end valid prefix
91  } // end iteration over all filter records
92  } // end filter function
93 
96 
101  std::vector<std::string> prefixes;
102 };
103 }
104 }
105 
106 #endif // _MADARA_FILTERS_PREFIX_INTCONVERT_H_
#define madara_logger_ptr_log(loggering, level,...)
Fast version of the madara::logger::log method for Logger pointers.
Definition: Logger.h:41
Abstract base class for implementing aggregate record filters via a functor interface.
Filter for printing variables as they arrive and excluding prefixes that are unwanted via a user-spec...
PrefixIntConvert(const std::vector< std::string > &source_prefixes={}, knowledge::KnowledgeRecord::Integer new_value=0)
Constructor.
std::vector< std::string > prefixes
Prefixes to print.
virtual void filter(knowledge::KnowledgeMap &records, const transport::TransportContext &, knowledge::Variables &)
Converts the records into integer values.
knowledge::KnowledgeRecord::Integer value
integer to convert all valid records to
virtual ~PrefixIntConvert()=default
Destructor.
Provides an interface for external functions into the MADARA KaRL variable settings.
Definition: Variables.h:53
Provides context about the transport.
T get(const KnowledgeRecord &kr)
Get the value of a KnowlegeRecord.
Definition: GetRecord.h:121
::std::map< std::string, KnowledgeRecord > KnowledgeMap
MADARA_EXPORT utility::Refcounter< logger::Logger > global_logger
MADARA_EXPORT bool begins_with(const std::string &input, const std::string &prefix)
Check if input contains prefix at the beginning.
Definition: Utility.inl:638
Copyright(c) 2020 Galois.