1 // ---------------------------------------------------------------------
2 // Copyright (C) 2015 Chris Garry
3 //
4 // This program is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with this program.  If not, see <http://www.gnu.org/licenses/>
16 // ---------------------------------------------------------------------
17 
18 
19 #ifndef PIPP_BUFFER_H
20 #define PIPP_BUFFER_H
21 
22 #include <cstdint>
23 #include <cstdint>
24 #include <cstddef>
25 
26 
27 //#define DEBUG
28 
29 
30 class c_pipp_buffer {
31     // ------------------------------------------
32     // Private definitions
33     // ------------------------------------------
34     private:
35         uint32_t m_buffer_size;
36         uint8_t *mp_buffer;
37 
38     // ------------------------------------------
39     // Public definitions
40     // ------------------------------------------
41 
42     public:
43         // ------------------------------------------
44         // Constructor
45         // ------------------------------------------
c_pipp_buffer()46         c_pipp_buffer() :
47             m_buffer_size(0),
48             mp_buffer(nullptr) {};
49 
50 
51         // ------------------------------------------
52         // Destructor
53         // ------------------------------------------
~c_pipp_buffer()54         ~c_pipp_buffer() {
55             delete [] mp_buffer;
56         };
57 
58 
59         // ------------------------------------------
60         // Get buffer ptr
61         // ------------------------------------------
get_buffer_ptr()62         inline uint8_t *get_buffer_ptr() {
63             return mp_buffer;
64         };
65 
66 
67         // ------------------------------------------
68         // Member function to set a new  buffer
69         // ------------------------------------------
70         // Caller has the responsibility to esure the old buffer is freed
71         // and the new buffer is large enough
set_buffer_ptr(uint8_t * new_ptr)72         uint8_t *set_buffer_ptr(uint8_t *new_ptr) {
73             uint8_t *ret = mp_buffer;
74             mp_buffer = new_ptr;
75             return ret;
76         }
77 
78 
79         // ------------------------------------------
80         // Member function to get a new  buffer
81         // ------------------------------------------
82         uint8_t *get_buffer(
83             uint32_t size);
84 
85 
86         // ------------------------------------------
87         // Member function to get a new zeroed buffer
88         // ------------------------------------------
89         uint8_t *get_zero_buffer(
90             uint32_t size);
91 
92 
93         // ------------------------------------------
94         // Member function to delete buffer
95         // ------------------------------------------
96         void delete_buffer();
97 
98 };
99 
100 
101 #endif  // PIPP_BUFFER_H
102