4 * Copyright (c) 1998 by Gilbert Ramirez <gram@alumni.rice.edu>
6 * SPDX-License-Identifier: GPL-2.0-or-later
10 #define __W_BUFFER_H__
14 #include "ws_symbol_export.h"
18 #endif /* __cplusplus */
20 #define SOME_FUNCTIONS_ARE_INLINE
22 typedef struct Buffer
{
30 void ws_buffer_init(Buffer
* buffer
, size_t space
);
32 void ws_buffer_free(Buffer
* buffer
);
34 void ws_buffer_assure_space(Buffer
* buffer
, size_t space
);
36 void ws_buffer_append(Buffer
* buffer
, const uint8_t *from
, size_t bytes
);
38 void ws_buffer_remove_start(Buffer
* buffer
, size_t bytes
);
40 void ws_buffer_cleanup(void);
42 #ifdef SOME_FUNCTIONS_ARE_INLINE
45 ws_buffer_clean(Buffer
*buffer
)
48 buffer
->first_free
= 0;
52 ws_buffer_increase_length(Buffer
* buffer
, size_t bytes
)
54 buffer
->first_free
+= bytes
;
58 ws_buffer_length(const Buffer
* buffer
)
60 return buffer
->first_free
- buffer
->start
;
63 static inline uint8_t *
64 ws_buffer_start_ptr(const Buffer
* buffer
)
66 return buffer
->data
+ buffer
->start
;
69 static inline uint8_t *
70 ws_buffer_end_ptr(const Buffer
* buffer
)
72 return buffer
->data
+ buffer
->first_free
;
76 ws_buffer_append_buffer(Buffer
* buffer
, Buffer
* src_buffer
)
78 ws_buffer_append(buffer
, ws_buffer_start_ptr(src_buffer
), ws_buffer_length(src_buffer
));
82 void ws_buffer_clean(Buffer
* buffer
);
84 void ws_buffer_increase_length(Buffer
* buffer
, size_t bytes
);
86 size_t ws_buffer_length(const Buffer
* buffer
);
88 uint8_t* ws_buffer_start_ptr(const Buffer
* buffer
);
90 uint8_t* ws_buffer_end_ptr(const Buffer
* buffer
);
92 void ws_buffer_append_buffer(Buffer
* buffer
, Buffer
* src_buffer
);
97 #endif /* __cplusplus */