Checks whether the given message matches at least one of the
        current filters. See :meth:`~can.BusABC.set_filters` for details
        on how the filters work.

        This method should not be overridden.

        :param can.Message msg:
            the message to check if matching
        :rtype: bool
        :return: whether the given message matches at least one filter

def _matches_filters(self, msg):
        """Checks whether the given message matches at least one of the
        current filters. See :meth:`~can.BusABC.set_filters` for details
        on how the filters work.

        This method should not be overridden.

        :param can.Message msg:
            the message to check if matching
        :rtype: bool
        :return: whether the given message matches at least one filter
        """

        # if no filters are set, all messages are matched
        if self._filters is None:
            return True

        for _filter in self._filters:
            # check if this filter even applies to the message
            if 'extended' in _filter and \
                    _filter['extended'] != msg.is_extended_id:
                continue

            # then check for the mask and id
            can_id = _filter['can_id']
            can_mask = _filter['can_mask']

            # basically, we compute
            # `msg.arbitration_id & can_mask == can_id & can_mask`
            # by using the shorter, but equivalent from below:
            if (can_id ^ msg.arbitration_id) & can_mask == 0:
                return True

        # nothing matched
        return False