{
      {{BrushingTarget::Row}, BrushingModification::Filtered, InvalidationLevel::InvalidOutput},
      {{BrushingTarget::Column}, BrushingModification::Selected,
   InvalidationLevel::InvalidOutput}
    }
    );
    
    BrushingAndLinkingInport("brushing",
    {
   BrushingModification::Selected, InvalidationLevel::InvalidOutput}
    }
    );
   @param identifier of port.
   @param invalidationLevels 
for brushing targets and actions that should 
invalidate the
   processor (
Processor::process will be called 
for those). Defaults to InvalidOutput 
for all
   targets (Row, Column) and all actions (filtering/selection/highlight).
  /
BrushingAndLinkingInport(std::string_view identifier,
                         std::vector<BrushingTargetsInvalidationLevel> invalidationLevels = {
                              BrushingModifications(flags::any),
                              InvalidationLevel::InvalidOutput}});
BrushingAndLinkingInport(std::string_view identifier, Document help,
                         std::vector<BrushingTargetsInvalidationLevel> invalidationLevels = {
                              BrushingModifications(flags::any),
                              InvalidationLevel::InvalidOutput}});
virtual ~BrushingAndLinkingInport() = default;
BrushingModifications getModifiedActions() const;
std::vector<BrushingTarget> getModifiedTargets() const;
const std::unordered_map<BrushingTarget, BrushingModifications>& getModified() const;
bool isFilteringModified() const;
bool isSelectionModified() const;
bool isHighlightModified() const;
void brush(
BrushingAction action, BrushingTarget target, 
const BitSet& indices,
 
           std::string_view source = {});
 
void filter(std::string_view source, const BitSet& indices,
            BrushingTarget target = BrushingTarget::Row);
void select(const BitSet& indices, BrushingTarget target = BrushingTarget::Row);
void highlight(const BitSet& indices, BrushingTarget target = BrushingTarget::Row);
 
[[deprecated("use brush() or filter() instead")]] void sendFilterEvent(const BitSet& indices, std::string_view source);
[[deprecated("use brush() or select() instead")]] void sendSelectionEvent(const BitSet& indices);
[[deprecated("use brush() or select() with a column target instead")]] void sendColumnSelectionEvent(const BitSet& indices);
 
bool isFiltered(uint32_t idx, BrushingTarget target = BrushingTarget::Row) const;
bool isSelected(uint32_t idx, BrushingTarget target = BrushingTarget::Row) 
const;
 
bool isHighlighted(uint32_t idx, BrushingTarget target = BrushingTarget::Row) const;
 
[[deprecated("use isSelected() with a column target instead")]] bool isColumnSelected(uint32_t idx) const;
 
                         BrushingTarget target = BrushingTarget::Row) const;
 
const BitSet& getFilteredIndices(BrushingTarget target = BrushingTarget::Row) const;
const BitSet& getSelectedIndices(BrushingTarget target = BrushingTarget::Row) const;
const BitSet& getHighlightedIndices(BrushingTarget target = BrushingTarget::Row) const;
 
[[deprecated("use getIndices() or getSelectedIndices() with a column target instead")]] const BitSet& getSelectedColumns() const;
const std::vector<BrushingTargetsInvalidationLevel>& getInvalidationLevels() const;