cascade.cpp

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 }

Generated on Tue Feb 22 13:32:30 2011 for Fawkes API by  doxygen 1.4.7