LCOV - code coverage report
Current view: top level - cpp2can/include/can/filter - AbstractStaticBitFieldFilter.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 6 13 46.2 %
Date: 2025-01-20 13:53:09 Functions: 2 6 33.3 %

          Line data    Source code
       1             : // Copyright 2024 Accenture.
       2             : 
       3             : /**
       4             :  * Contains AbstractStaticBitFieldFilter class.
       5             :  * \file AbstractStaticBitFieldFilter.h
       6             :  * \ingroup filter
       7             :  */
       8             : #ifndef GUARD_E7A6E92B_357C_4D76_A06B_8631D2F5D167
       9             : #define GUARD_E7A6E92B_357C_4D76_A06B_8631D2F5D167
      10             : 
      11             : #include "can/canframes/CANFrame.h"
      12             : #include "can/filter/IFilter.h"
      13             : #include "can/filter/IMerger.h"
      14             : 
      15             : #include <estd/assert.h>
      16             : #include <platform/estdint.h>
      17             : 
      18             : #include <cstring>
      19             : 
      20             : namespace can
      21             : {
      22             : /**
      23             :  * Cpp2CAN AbstractStaticBitFieldFilter
      24             :  *
      25             :  *
      26             :  * A StaticBitFieldFilter allows to filter an id range
      27             :  * on CAN (0 - MAX_ID) and has a constant bitfield.
      28             :  */
      29             : class AbstractStaticBitFieldFilter : public IFilter
      30             : {
      31             : public:
      32             :     /** maximum id storable in this filter */
      33             :     static uint16_t const MAX_ID         = static_cast<uint16_t>(CANFrame::MAX_FRAME_ID);
      34             :     /** number of bits occupied by this filter */
      35             :     static uint16_t const NUMBER_OF_BITS = MAX_ID + 1U;
      36             :     /** size (in byte) of filters bitmask */
      37             :     static uint16_t const MASK_SIZE      = NUMBER_OF_BITS / 8U;
      38             : 
      39             :     /**
      40             :      * default constructor
      41             :      */
      42           4 :     AbstractStaticBitFieldFilter() : IFilter() {}
      43             : 
      44             :     /**
      45             :      * \see IFilter::add()
      46             :      */
      47           0 :     void add(uint32_t) override
      48             :     {
      49             :         // not applicable with a static filter
      50           0 :     }
      51             : 
      52             :     /**
      53             :      * \see IFilter::add()
      54             :      */
      55           0 :     void add(uint32_t, uint32_t) override
      56             :     {
      57             :         // not applicable with a static filter
      58           0 :     }
      59             : 
      60             :     /**
      61             :      * \see IFilter::match()
      62             :      * \param filterId        id to check
      63             :      * \return *             - true if internal mask matches filterId
      64             :      *             - false else
      65             :      */
      66             :     bool match(uint32_t filterId) const override;
      67             : 
      68             :     /**
      69             :      * \see IFilter::clear()
      70             :      */
      71           0 :     void clear() override
      72             :     {
      73             :         // not applicable with a static filter
      74           0 :     }
      75             : 
      76             :     /**
      77             :      * \see IFilter::open()
      78             :      */
      79           1 :     void open() override
      80             :     {
      81             :         // not applicable with a static filter
      82           0 :     }
      83             : 
      84             :     /**
      85             :      * \see IFilter::acceptMerger()
      86             :      */
      87           1 :     void acceptMerger(IMerger& merger) override { merger.mergeWithStaticBitField(*this); }
      88             : 
      89             :     /**
      90             :      * Get the byte at position byteIndex from the filter mask
      91             :      * \param byteIndex index of byte to retreive
      92             :      */
      93             :     virtual uint8_t getMaskValue(uint16_t byteIndex) const = 0;
      94             : 
      95             : private:
      96             :     // friends
      97             :     friend bool
      98             :     operator==(AbstractStaticBitFieldFilter const& x, AbstractStaticBitFieldFilter const& y);
      99             :     // no copies
     100             :     AbstractStaticBitFieldFilter(AbstractStaticBitFieldFilter const&);
     101             :     AbstractStaticBitFieldFilter& operator=(AbstractStaticBitFieldFilter const&);
     102             : };
     103             : 
     104             : /**
     105             :  * compares two AbstractStaticBitFieldFilter objects
     106             :  * \param x    first operand of comparison
     107             :  * \param y    second operand of comparison
     108             :  * \return *             - true: both filters are equal
     109             :  *             - false: filters are not equal
     110             :  */
     111           2 : inline bool operator==(AbstractStaticBitFieldFilter const& x, AbstractStaticBitFieldFilter const& y)
     112             : {
     113         258 :     for (uint16_t i = 0U; i < AbstractStaticBitFieldFilter::MASK_SIZE; ++i)
     114             :     {
     115         257 :         if (x.getMaskValue(i) != y.getMaskValue(i))
     116             :         {
     117             :             return false;
     118             :         }
     119             :     }
     120             :     return true;
     121             : }
     122             : 
     123             : } // namespace can
     124             : 
     125             : #endif // GUARD_E7A6E92B_357C_4D76_A06B_8631D2F5D167

Generated by: LCOV version 1.14