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 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 }