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 
28 namespace fawkes {
29 class Time;
30 }
31 
32 class LaserDataFilter
33 {
34 public:
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 
79 protected:
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 
85 protected:
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 
92 private:
93  bool own_in_;
94  bool own_out_;
95 };
96 
97 #endif
LaserDataFilter::filter
virtual void filter()=0
LaserDataFilter::copy_to_outbuf
void copy_to_outbuf(Buffer *outbuf, const Buffer *inbuf)
Copies the readings from inbuf to outbuf.
Definition: filter.cpp:194
LaserDataFilter::filter_name
std::string filter_name
Definition: filter.h:85
LaserDataFilter::Buffer::name
std::string name
name of the input buffer
Definition: filter.h:42
LaserDataFilter::Buffer::~Buffer
~Buffer()
Destructor.
Definition: filter.cpp:242
LaserDataFilter::Buffer::frame
std::string frame
reference coordinate frame ID
Definition: filter.h:43
LaserDataFilter::in_data_size
unsigned int in_data_size
Definition: filter.h:87
LaserDataFilter::owns_in
bool owns_in() const
Check if input arrays are owned by filter.
Definition: filter.h:66
LaserDataFilter::get_out_data_size
virtual unsigned int get_out_data_size()
Get size of filtered data array.
Definition: filter.cpp:172
LaserDataFilter::reset_outbuf
void reset_outbuf(Buffer *b)
Resets all readings in outbuf to NaN.
Definition: filter.cpp:181
LaserDataFilter::in
std::vector< Buffer * > in
Definition: filter.h:88
LaserDataFilter::get_out_vector
virtual std::vector< Buffer * > & get_out_vector()
Get filtered data array.
Definition: filter.cpp:116
LaserDataFilter::Buffer::values
float * values
values
Definition: filter.h:44
LaserDataFilter::~LaserDataFilter
virtual ~LaserDataFilter()
Virtual empty destructor.
Definition: filter.cpp:97
fawkes
LaserDataFilter::set_out_data_size
virtual void set_out_data_size(unsigned int data_size)
Resize output arrays.
Definition: filter.cpp:155
LaserDataFilter::out_data_size
unsigned int out_data_size
Definition: filter.h:86
LaserDataFilter::Buffer::Buffer
Buffer(size_t num_values=0)
Constructor.
Definition: filter.cpp:220
LaserDataFilter::Buffer::resize
void resize(unsigned int num_values)
Resize buffer size.
Definition: filter.cpp:271
LaserDataFilter::owns_out
bool owns_out() const
Check if output arrays are owned by filter.
Definition: filter.h:73
LaserDataFilter::set_out_vector
virtual void set_out_vector(std::vector< Buffer * > &out)
Set filtered data array.
Definition: filter.cpp:128
fawkes::Time
Definition: time.h:96
LaserDataFilter::LaserDataFilter
LaserDataFilter(const std::string &filter_name, unsigned int in_data_size, const std::vector< Buffer * > &in, unsigned int out_size)
Constructor.
Definition: filter.cpp:77
LaserDataFilter
Definition: filter.h:31
LaserDataFilter::Buffer::timestamp
fawkes::Time * timestamp
timestamp of data
Definition: filter.h:45
LaserDataFilter::set_array_ownership
void set_array_ownership(bool own_in, bool own_out)
Set input/output array ownership.
Definition: filter.cpp:210
LaserDataFilter::Buffer::operator=
Buffer & operator=(const Buffer &other)
Assignment operator.
Definition: filter.cpp:255
LaserDataFilter::out
std::vector< Buffer * > out
Definition: filter.h:89
LaserDataFilter::Buffer
Definition: filter.h:34