Fawkes API Fawkes Development Version
|
00001 00002 /*************************************************************************** 00003 * cascade.cpp - Laser data filter cascade 00004 * 00005 * Created: Thu Jun 25 01:07:53 2009 00006 * Copyright 2006-2009 Tim Niemueller [www.niemueller.de] 00007 * 00008 ****************************************************************************/ 00009 00010 /* This program is free software; you can redistribute it and/or modify 00011 * it under the terms of the GNU General Public License as published by 00012 * the Free Software Foundation; either version 2 of the License, or 00013 * (at your option) any later version. 00014 * 00015 * This program is distributed in the hope that it will be useful, 00016 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00018 * GNU Library General Public License for more details. 00019 * 00020 * Read the full text in the LICENSE.GPL file in the doc directory. 00021 */ 00022 00023 #include "cascade.h" 00024 00025 /** @class LaserDataFilterCascade "filters/cascade.h" 00026 * Cascade of several laser filters to one. 00027 * The filters are executed in the order they are added to the cascade. 00028 * @author Tim Niemueller 00029 */ 00030 00031 /** Constructor. 00032 * @param own_filters true to make the cascade own filters that are added, i.e. 00033 * they are deleted if the cascade is deleted. 00034 */ 00035 LaserDataFilterCascade::LaserDataFilterCascade(bool own_filters) 00036 { 00037 _free_filtered_data = false; 00038 __own_filters = own_filters; 00039 } 00040 00041 00042 /** Destructor. */ 00043 LaserDataFilterCascade::~LaserDataFilterCascade() 00044 { 00045 if (__own_filters) delete_filters(); 00046 } 00047 00048 00049 /** Add a filter to the cascade. 00050 * @param filter filter to add 00051 */ 00052 void 00053 LaserDataFilterCascade::add_filter(LaserDataFilter *filter) 00054 { 00055 __filters.push_back(filter); 00056 } 00057 00058 00059 /** Remove a filter from the cascade. 00060 * @param filter filter to remove 00061 */ 00062 void 00063 LaserDataFilterCascade::remove_filter(LaserDataFilter *filter) 00064 { 00065 __filters.remove(filter); 00066 } 00067 00068 00069 /** Delete all filters. */ 00070 void 00071 LaserDataFilterCascade::delete_filters() 00072 { 00073 for (__fit = __filters.begin(); __fit != __filters.end(); ++__fit) { 00074 delete *__fit; 00075 } 00076 __filters.clear(); 00077 } 00078 00079 00080 void 00081 LaserDataFilterCascade::filter(const float *data, unsigned int data_size) 00082 { 00083 float *d = (float *)data; 00084 for (__fit = __filters.begin(); __fit != __filters.end(); ++__fit) { 00085 (*__fit)->filter(d, data_size); 00086 (*__fit)->filtered_data(d, data_size); 00087 } 00088 _filtered_data = (float *)d; 00089 _filtered_data_size = data_size; 00090 }