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
32namespace lely {
33
35template <>
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
56class 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_
This header file is part of the CAN library; it contains the CAN frame buffer declarations.
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
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
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
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
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
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
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
LELY_CAN_BUF_INLINE void can_buf_clear(struct can_buf *buf)
Clears a CAN frame buffer.
Definition buf.h:178
void can_buf_fini(struct can_buf *buf)
Finalizes a CAN frame buffer.
Definition buf.c:41
This header file is part of the utilities library; it contains the C to C++ interface declarations.
A CAN frame buffer.
Definition buf.hpp:56
The base class for a C++ interface to a standard layout C type.
Definition c_type.hpp:174
A CAN frame buffer.
Definition buf.h:42
A CAN or CAN FD format frame.
Definition msg.h:87
A class template supplying a uniform interface to certain attributes of C types.
Definition c_type.hpp:350