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