Lely core libraries  2.3.4
buf.hpp
Go to the documentation of this file.
1 
22 #ifndef LELY_CAN_BUF_HPP_
23 #define LELY_CAN_BUF_HPP_
24 
25 #ifndef __cplusplus
26 #error "include <lely/can/buf.h> for the C interface"
27 #endif
28 
29 #include <lely/util/c_type.hpp>
30 #include <lely/can/buf.h>
31 
32 namespace lely {
33 
35 template <>
37  typedef can_buf value_type;
38  typedef value_type& reference;
39  typedef const value_type& const_reference;
40  typedef value_type* pointer;
41  typedef const value_type* const_pointer;
42 
43  static pointer
44  init(pointer p) noexcept {
45  can_buf_init(p, nullptr, 0);
46  return p;
47  }
48 
49  static void
50  fini(pointer p) noexcept {
51  can_buf_fini(p);
52  }
53 };
54 
56 class CANBuf : public standard_c_type<can_buf> {
58 
59  public:
60  CANBuf() : c_base() {}
61 
62  CANBuf& operator=(const CANBuf&) = delete;
63 
64  void
65  clear() noexcept {
66  can_buf_clear(c_ptr());
67  }
68 
69  ::std::size_t
70  size() const noexcept {
71  return can_buf_size(c_ptr());
72  }
73 
74  ::std::size_t
75  capacity() const noexcept {
76  return can_buf_capacity(c_ptr());
77  }
78 
79  ::std::size_t
80  reserve(::std::size_t n) noexcept {
81  return can_buf_reserve(c_ptr(), n);
82  }
83 
84  ::std::size_t
85  peek(can_msg* ptr, ::std::size_t n) noexcept {
86  return can_buf_peek(c_ptr(), ptr, n);
87  }
88 
89  bool
90  peek(can_msg& msg) noexcept {
91  return !!peek(&msg, 1);
92  }
93 
94  ::std::size_t
95  read(can_msg* ptr, ::std::size_t n) noexcept {
96  return can_buf_read(c_ptr(), ptr, n);
97  }
98 
99  bool
100  read(can_msg& msg) noexcept {
101  return !!read(&msg, 1);
102  }
103 
104  ::std::size_t
105  write(const can_msg* ptr, ::std::size_t n) noexcept {
106  return can_buf_write(c_ptr(), ptr, n);
107  }
108 
109  bool
110  write(const can_msg& msg) noexcept {
111  return !!write(&msg, 1);
112  }
113 
114  private:
115  can_msg* m_ptr;
116  ::std::size_t m_size;
117  ::std::size_t m_begin;
118  ::std::size_t m_end;
119 };
120 
121 } // namespace lely
122 
123 #endif // !LELY_CAN_BUF_HPP_
can_buf_read
LELY_CAN_BUF_INLINE size_t can_buf_read(struct can_buf *buf, struct can_msg *ptr, size_t n)
Reads, and removes, frames from a CAN frame buffer.
Definition: buf.h:224
can_buf
A CAN frame buffer.
Definition: buf.h:42
can_buf_reserve
size_t can_buf_reserve(struct can_buf *buf, size_t n)
Resizes a CAN frame buffer, if necessary, to make room for at least n additional frames.
Definition: buf.c:53
can_msg
A CAN or CAN FD format frame.
Definition: msg.h:87
c_type.hpp
lely::CANBuf
A CAN frame buffer.
Definition: buf.hpp:56
buf.h
can_buf_capacity
LELY_CAN_BUF_INLINE size_t can_buf_capacity(const struct can_buf *buf)
Returns the number of frames available for writing in a CAN buffer.
Definition: buf.h:195
lely::c_type_traits
A class template supplying a uniform interface to certain attributes of C types.
Definition: c_type.hpp:120
lely::standard_c_type
The base class for a C++ interface to a standard layout C type.
Definition: c_type.hpp:174
can_buf_init
LELY_CAN_BUF_INLINE void can_buf_init(struct can_buf *buf, struct can_msg *ptr, size_t size)
Initializes a CAN frame buffer.
Definition: buf.h:165
can_buf_write
LELY_CAN_BUF_INLINE size_t can_buf_write(struct can_buf *buf, const struct can_msg *ptr, size_t n)
Writes frames to a CAN frame buffer.
Definition: buf.h:246
can_buf_size
LELY_CAN_BUF_INLINE size_t can_buf_size(const struct can_buf *buf)
Returns the number of frames available for reading in a CAN buffer.
Definition: buf.h:186
can_buf_clear
LELY_CAN_BUF_INLINE void can_buf_clear(struct can_buf *buf)
Clears a CAN frame buffer.
Definition: buf.h:178
can_buf_peek
LELY_CAN_BUF_INLINE size_t can_buf_peek(struct can_buf *buf, struct can_msg *ptr, size_t n)
Reads, but does not remove, frames from a CAN frame buffer.
Definition: buf.h:204
can_buf_fini
void can_buf_fini(struct can_buf *buf)
Finalizes a CAN frame buffer.
Definition: buf.c:41