Safe API Framework 0.1.0 build 384e6ae
Layered API framework for safety-related applications (ERTMS RBC reference targeting CENELEC EN 50128 SIL 4)
Loading...
Searching...
No Matches
rte_buffer.h
Go to the documentation of this file.
1
19#ifndef RTE_COMMON_BUFFER_H
20#define RTE_COMMON_BUFFER_H
21
24
25#ifdef __cplusplus
26extern "C" {
27#endif
28
35typedef struct rte_buffer_s
36{
37 void *data;
38 size_t capacity;
39 size_t length;
41
46typedef struct rte_const_buffer_s
47{
48 const void *data;
49 size_t length;
51
62rte_status_t rte_buffer_init(rte_buffer_t *buf, void *storage, size_t capacity);
63
72
82
93rte_status_t rte_buffer_copy_in(rte_buffer_t *buf, const void *src, size_t src_len);
94
109 void *dest,
110 size_t dest_capacity,
111 size_t *out_copied);
112
124
132bool rte_buffer_is_valid(const rte_buffer_t *buf);
133
134/*
135 * Endianness-safe multi-byte access (ADR-006 section 2.5). Byte order is
136 * always explicit at the call site (_le / _be suffix) - there is no
137 * default/"network order" variant. write_* functions append at buf's
138 * current length and advance it, like rte_buffer_copy_in(); read_*
139 * functions take an explicit offset and do not mutate the buffer, like
140 * rte_buffer_copy_out().
141 */
142
197
207rte_status_t rte_buffer_read_u16_le(const rte_buffer_t *buf, size_t offset, uint16_t *out_value);
216rte_status_t rte_buffer_read_u16_be(const rte_buffer_t *buf, size_t offset, uint16_t *out_value);
226rte_status_t rte_buffer_read_u32_le(const rte_buffer_t *buf, size_t offset, uint32_t *out_value);
235rte_status_t rte_buffer_read_u32_be(const rte_buffer_t *buf, size_t offset, uint32_t *out_value);
245rte_status_t rte_buffer_read_u64_le(const rte_buffer_t *buf, size_t offset, uint64_t *out_value);
254rte_status_t rte_buffer_read_u64_be(const rte_buffer_t *buf, size_t offset, uint64_t *out_value);
255
256#ifdef __cplusplus
257}
258#endif
259
260#endif /* RTE_COMMON_BUFFER_H */
261 /* BUFFER */
rte_status_t rte_buffer_read_u64_be(const rte_buffer_t *buf, size_t offset, uint64_t *out_value)
Reads a big-endian uint64_t. See rte_buffer_read_u64_le().
Definition rte_buffer.c:335
rte_status_t rte_buffer_write_u64_be(rte_buffer_t *buf, uint64_t value)
Appends a big-endian uint64_t. See rte_buffer_write_u64_le().
Definition rte_buffer.c:217
rte_status_t rte_buffer_read_u16_le(const rte_buffer_t *buf, size_t offset, uint16_t *out_value)
Reads a little-endian uint16_t at the given offset.
Definition rte_buffer.c:229
rte_status_t rte_buffer_set_length(rte_buffer_t *buf, size_t length)
Marks length bytes of already-written storage as valid.
Definition rte_buffer.c:31
rte_status_t rte_buffer_copy_in(rte_buffer_t *buf, const void *src, size_t src_len)
Bounds-checked copy of external data into the buffer; sets length.
Definition rte_buffer.c:45
rte_status_t rte_buffer_write_u32_le(rte_buffer_t *buf, uint32_t value)
Appends a little-endian uint32_t at buf's current length.
Definition rte_buffer.c:186
rte_status_t rte_buffer_write_u64_le(rte_buffer_t *buf, uint64_t value)
Appends a little-endian uint64_t at buf's current length.
Definition rte_buffer.c:206
rte_status_t rte_buffer_init(rte_buffer_t *buf, void *storage, size_t capacity)
Binds a buffer view to caller-owned storage. Initial length is 0.
Definition rte_buffer.c:9
rte_status_t rte_buffer_as_const(const rte_buffer_t *buf, rte_const_buffer_t *out_view)
Produces a read-only view of the buffer's current valid bytes. The view is only valid as long as the ...
Definition rte_buffer.c:85
rte_status_t rte_buffer_write_u16_le(rte_buffer_t *buf, uint16_t value)
Appends a little-endian uint16_t at buf's current length.
Definition rte_buffer.c:170
rte_status_t rte_buffer_read_u16_be(const rte_buffer_t *buf, size_t offset, uint16_t *out_value)
Reads a big-endian uint16_t. See rte_buffer_read_u16_le().
Definition rte_buffer.c:249
rte_status_t rte_buffer_read_u32_le(const rte_buffer_t *buf, size_t offset, uint32_t *out_value)
Reads a little-endian uint32_t at the given offset.
Definition rte_buffer.c:269
rte_status_t rte_buffer_write_u32_be(rte_buffer_t *buf, uint32_t value)
Appends a big-endian uint32_t. See rte_buffer_write_u32_le().
Definition rte_buffer.c:196
bool rte_buffer_is_valid(const rte_buffer_t *buf)
Defensive validity check: non-null data and length <= capacity.
Definition rte_buffer.c:100
rte_status_t rte_buffer_clear(rte_buffer_t *buf)
Resets length to 0; capacity and data are unchanged.
Definition rte_buffer.c:21
rte_status_t rte_buffer_read_u32_be(const rte_buffer_t *buf, size_t offset, uint32_t *out_value)
Reads a big-endian uint32_t. See rte_buffer_read_u32_le().
Definition rte_buffer.c:290
rte_status_t rte_buffer_write_u16_be(rte_buffer_t *buf, uint16_t value)
Appends a big-endian uint16_t. See rte_buffer_write_u16_le().
Definition rte_buffer.c:178
rte_status_t rte_buffer_read_u64_le(const rte_buffer_t *buf, size_t offset, uint64_t *out_value)
Reads a little-endian uint64_t at the given offset.
Definition rte_buffer.c:311
rte_status_t rte_buffer_copy_out(const rte_buffer_t *buf, void *dest, size_t dest_capacity, size_t *out_copied)
Bounds-checked copy of the buffer's valid bytes to an external destination.
Definition rte_buffer.c:63
rte_status_t
Common result/status codes.
Definition rte_status.h:27
Common status/error codes returned by every Safe API Framework function. Shared across all OS Abstrac...
Common fixed-width types and the caller-owned-storage handle pattern used by every OAL service (see A...
Mutable, bounds-tracked view over caller-owned storage.
Definition rte_buffer.h:36
size_t capacity
Definition rte_buffer.h:38
void * data
Definition rte_buffer.h:37
size_t length
Definition rte_buffer.h:39
Read-only view of a buffer's currently valid bytes. Grants no write access to the underlying storage.
Definition rte_buffer.h:47
const void * data
Definition rte_buffer.h:48