GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: include/sot/core/mailbox.hh Lines: 1 1 100.0 %
Date: 2023-03-13 12:09:37 Branches: 0 0 - %

Line Branch Exec Source
1
/*
2
 * Copyright 2010,
3
 * François Bleibel,
4
 * Olivier Stasse,
5
 *
6
 * CNRS/AIST
7
 *
8
 */
9
10
#ifndef __SOT_MAILBOX_HH
11
#define __SOT_MAILBOX_HH
12
13
/* --- SOT PLUGIN  --- */
14
#include <dynamic-graph/all-signals.h>
15
#include <dynamic-graph/entity.h>
16
17
/* --- BOOST --- */
18
#include <boost/thread/mutex.hpp>
19
#include <boost/thread/thread.hpp>
20
#include <boost/thread/xtime.hpp>
21
22
/* --- STD --- */
23
#include <time.h>
24
#ifndef WIN32
25
#include <sys/time.h>
26
#else
27
#include <sot/core/utils-windows.hh>
28
#endif /*WIN32*/
29
#include <string>
30
31
namespace dynamicgraph {
32
namespace sot {
33
34
namespace dg = dynamicgraph;
35
36
template <class Object>
37
struct MailboxTimestampedObject {
38
  Object obj;
39
  struct timeval timestamp;
40
};
41
42
template <class Object>
43
class Mailbox : public dg::Entity {
44
 public:
45
  static const std::string CLASS_NAME;
46
250
  virtual const std::string &getClassName(void) const { return CLASS_NAME; }
47
48
 public:
49
  typedef MailboxTimestampedObject<Object> sotTimestampedObject;
50
51
 public:
52
  Mailbox(const std::string &name);
53
  ~Mailbox(void);
54
55
  void post(const Object &obj);
56
  sotTimestampedObject &get(sotTimestampedObject &res, const int &dummy);
57
58
  Object &getObject(Object &res, const int &time);
59
  struct timeval &getTimestamp(struct timeval &res, const int &time);
60
61
  bool hasBeenUpdated(void);
62
63
 protected:
64
  boost::timed_mutex mainObjectMutex;
65
  Object mainObject;
66
  struct timeval mainTimeStamp;
67
  bool update;
68
69
 public: /* --- SIGNALS --- */
70
  dynamicgraph::SignalTimeDependent<sotTimestampedObject, int> SOUT;
71
  dynamicgraph::SignalTimeDependent<Object, int> objSOUT;
72
  dynamicgraph::SignalTimeDependent<struct timeval, int> timeSOUT;
73
};
74
75
} /* namespace sot */
76
77
template <class Object>
78
struct signal_io<sot::MailboxTimestampedObject<Object> >
79
    : signal_io_unimplemented<sot::MailboxTimestampedObject<Object> > {};
80
81
template <>
82
struct signal_io<timeval> : signal_io_unimplemented<timeval> {};
83
} /* namespace dynamicgraph */
84
85
#endif  // #ifndef  __SOT_MAILBOX_HH