Fawkes API  Fawkes Development Version
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 in_data_size number of entries input value arrays
00033  * @param in vector of input arrays
00034  */
00035 LaserDataFilterCascade::LaserDataFilterCascade(unsigned int in_data_size,
00036                                                std::vector<Buffer *> &in)
00037   : LaserDataFilter(in_data_size, in, 0)
00038 {
00039   out_data_size = in_data_size;
00040   out = in;
00041   set_array_ownership(false, false);
00042 }
00043 
00044 
00045 /** Destructor. */
00046 LaserDataFilterCascade::~LaserDataFilterCascade()
00047 {
00048   delete_filters();
00049 }
00050 
00051 
00052 /** Set filtered data array
00053  * @param out vector of output values. The vector is only accepted if it has
00054  * the same size as the current one. The filter will now longer assume
00055  * ownership of the arrays in the vector. Either free the memory or call
00056  * set_array_ownership().
00057  */
00058 void
00059 LaserDataFilterCascade::set_out_vector(std::vector<LaserDataFilter::Buffer *> &out)
00060 {
00061   __filters.back()->set_out_vector(out);
00062   this->out = __filters.back()->get_out_vector();
00063 }
00064 
00065 
00066 /** Add a filter to the cascade.
00067  * @param filter filter to add
00068  */
00069 void
00070 LaserDataFilterCascade::add_filter(LaserDataFilter *filter)
00071 {
00072   __filters.push_back(filter);
00073   out_data_size = filter->get_out_data_size();
00074   out = filter->get_out_vector();
00075 }
00076 
00077 
00078 /** Remove a filter from the cascade.
00079  * @param filter filter to remove
00080  */
00081 void
00082 LaserDataFilterCascade::remove_filter(LaserDataFilter *filter)
00083 {
00084   __filters.remove(filter);
00085 }
00086 
00087 
00088 /** Delete all filters. */
00089 void
00090 LaserDataFilterCascade::delete_filters()
00091 {
00092   for (__fit = __filters.begin(); __fit != __filters.end(); ++__fit) {
00093     delete *__fit;
00094   }
00095   __filters.clear();
00096 }
00097 
00098 
00099 void
00100 LaserDataFilterCascade::filter()
00101 {
00102   for (__fit = __filters.begin(); __fit != __filters.end(); ++__fit) {
00103     (*__fit)->filter();
00104   }
00105 }