Fawkes API Fawkes Development Version
filter.h
1
2/***************************************************************************
3 * filter.h - Laser data filter interface
4 *
5 * Created: Fri Oct 10 17:11:04 2008
6 * Copyright 2006-2011 Tim Niemueller [www.niemueller.de]
7 ****************************************************************************/
8
9/* This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU Library General Public License for more details.
18 *
19 * Read the full text in the LICENSE.GPL file in the doc directory.
20 */
21
22#ifndef _PLUGINS_LASER_FILTER_FILTER_H_
23#define _PLUGINS_LASER_FILTER_FILTER_H_
24
25#include <string>
26#include <vector>
27
28namespace fawkes {
29class Time;
30}
31
33{
34public:
35 class Buffer
36 {
37 public:
38 Buffer(size_t num_values = 0);
39 Buffer(const Buffer &other);
40 ~Buffer();
41 Buffer & operator=(const Buffer &other);
42 void resize(unsigned int num_values);
43 std::string name; ///< name of the input buffer
44 std::string frame; ///< reference coordinate frame ID
45 float * values; ///< values
46 fawkes::Time *timestamp; ///< timestamp of data
47 private:
48 unsigned int num_values_;
49 };
50
51 LaserDataFilter(const std::string & filter_name,
52 unsigned int in_data_size,
53 const std::vector<Buffer *> &in,
54 unsigned int out_size);
55 virtual ~LaserDataFilter();
56
57 virtual std::vector<Buffer *> &get_out_vector();
58 virtual void set_out_vector(std::vector<Buffer *> &out);
59 virtual unsigned int get_out_data_size();
60
61 virtual void filter() = 0;
62
63 void set_array_ownership(bool own_in, bool own_out);
64 /** Check if input arrays are owned by filter.
65 * @return true if arrays are owned by this filter, false otherwise. */
66 bool
67 owns_in() const
68 {
69 return own_in_;
70 };
71 /** Check if output arrays are owned by filter.
72 * @return true if arrays are owned by this filter, false otherwise. */
73 bool
74 owns_out() const
75 {
76 return own_out_;
77 };
78
79protected:
80 virtual void set_out_data_size(unsigned int data_size);
81
82 void reset_outbuf(Buffer *b);
83 void copy_to_outbuf(Buffer *outbuf, const Buffer *inbuf);
84
85protected:
86 std::string filter_name;
87 unsigned int out_data_size;
88 unsigned int in_data_size;
89 std::vector<Buffer *> in;
90 std::vector<Buffer *> out;
91
92private:
93 bool own_in_;
94 bool own_out_;
95};
96
97#endif
Laser data buffer.
Definition: filter.h:36
fawkes::Time * timestamp
timestamp of data
Definition: filter.h:46
void resize(unsigned int num_values)
Resize buffer size.
Definition: filter.cpp:272
Buffer & operator=(const Buffer &other)
Assignment operator.
Definition: filter.cpp:256
std::string frame
reference coordinate frame ID
Definition: filter.h:44
Buffer(size_t num_values=0)
Constructor.
Definition: filter.cpp:221
std::string name
name of the input buffer
Definition: filter.h:43
~Buffer()
Destructor.
Definition: filter.cpp:243
float * values
values
Definition: filter.h:45
Laser data filter.
Definition: filter.h:33
void set_array_ownership(bool own_in, bool own_out)
Set input/output array ownership.
Definition: filter.cpp:211
virtual std::vector< Buffer * > & get_out_vector()
Get filtered data array.
Definition: filter.cpp:117
virtual unsigned int get_out_data_size()
Get size of filtered data array.
Definition: filter.cpp:173
LaserDataFilter(const std::string &filter_name, unsigned int in_data_size, const std::vector< Buffer * > &in, unsigned int out_size)
Constructor.
Definition: filter.cpp:78
unsigned int out_data_size
Number of entries in output arrays.
Definition: filter.h:87
bool owns_out() const
Check if output arrays are owned by filter.
Definition: filter.h:74
void copy_to_outbuf(Buffer *outbuf, const Buffer *inbuf)
Copies the readings from inbuf to outbuf.
Definition: filter.cpp:195
bool owns_in() const
Check if input arrays are owned by filter.
Definition: filter.h:67
unsigned int in_data_size
Number of entries in input arrays.
Definition: filter.h:88
std::string filter_name
Name of the specific filter instance.
Definition: filter.h:86
virtual void filter()=0
Filter the incoming data.
std::vector< Buffer * > out
Vector of output arrays.
Definition: filter.h:90
std::vector< Buffer * > in
Vector of input arrays.
Definition: filter.h:89
void reset_outbuf(Buffer *b)
Resets all readings in outbuf to NaN.
Definition: filter.cpp:182
virtual ~LaserDataFilter()
Virtual empty destructor.
Definition: filter.cpp:98
virtual void set_out_data_size(unsigned int data_size)
Resize output arrays.
Definition: filter.cpp:156
virtual void set_out_vector(std::vector< Buffer * > &out)
Set filtered data array.
Definition: filter.cpp:129
A class for handling time.
Definition: time.h:93
Fawkes library namespace.