#region License Information /* HeuristicLab * Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL) * * This file is part of HeuristicLab. * * HeuristicLab is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * HeuristicLab is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with HeuristicLab. If not, see . */ #endregion using System.Collections.Generic; using System.Linq; using HeuristicLab.DataPreprocessing.Filter; using HeuristicLab.DataPreprocessing.Interfaces; namespace HeuristicLab.DataPreprocessing { public class FilterLogic : IFilterLogic { private IFilteredPreprocessingData preprocessingData; public FilterLogic(IFilteredPreprocessingData preprocessingData) { this.preprocessingData = preprocessingData; } public bool[] Preview(IList filters, bool isAndCombination) { IList activeFilters = filters.Where(f => f.Active && f.ConstraintData != null).ToList(); if (activeFilters.Count == 0) { return new bool[preprocessingData.Rows]; } bool[] result = CreateBoolArray(preprocessingData.Rows, isAndCombination); foreach (IFilter filter in activeFilters) { bool[] filterResult = filter.Check(); for (int row = 0; row < result.Length; ++row) { result[row] = Result(result[row], filterResult[row], isAndCombination); } } preprocessingData.SetFilter(result); return result; } public bool[] CreateBoolArray(int rows, bool value) { return Enumerable.Repeat(value, rows).ToArray(); } public bool Result(bool current, bool addition, bool isAndCombination) { return isAndCombination ? current && addition : current || addition; } public void Apply(IList filters, bool isAndCombination) { preprocessingData.SetFilter(Preview(filters, isAndCombination)); preprocessingData.PersistFilter(); } public void Reset() { preprocessingData.ResetFilter(); } public IPreprocessingData PreprocessingData { get { return preprocessingData; } } } }