NetLink Sockets C++  1.0.0
Networking C++ Library
 All Classes Namespaces Files Functions Enumerations Enumerator Pages
smart_buffer.h
1 /*
2  NetLink Sockets: Networking C++ library
3  Copyright 2012 Pedro Francisco Pareja Ruiz (PedroPareja@Gmail.com)
4 
5  This file is part of NetLink Sockets.
6 
7  NetLink Sockets is free software: you can redistribute it and/or modify
8  it under the terms of the GNU General Public License as published by
9  the Free Software Foundation, either version 3 of the License, or
10  (at your option) any later version.
11 
12  NetLink Sockets is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with NetLink Sockets. If not, see <http://www.gnu.org/licenses/>.
19 
20 */
21 
22 
23 #ifndef __NL_SMART_BUFFER
24 #define __NL_SMART_BUFFER
25 
26 #include <stdlib.h>
27 #include <string.h>
28 
29 #include <netlink/core.h>
30 #include <netlink/util.h>
31 #include <netlink/socket.h>
32 
33 
34 NL_NAMESPACE
35 
36 
46 class SmartBuffer {
47 
48  private:
49 
50  void* _buffer;
51  size_t _usedSize;
52  size_t _allocSize;
53  double _reallocRatio;
54 
55  public:
56 
57  SmartBuffer(size_t allocSize = DEFAULT_SMARTBUFFER_SIZE, double reallocRatio = DEFAULT_SMARTBUFFER_REALLOC_RATIO);
59  ~SmartBuffer();
60 
61  const void* operator*() const;
62  const char* operator[](size_t index) const;
63 
64  const void* buffer() const;
65  size_t size() const;
66 
67  void read(Socket* socket);
68 
69  void clear();
70 
71  SmartBuffer& operator=(SmartBuffer& s);
72 };
73 
74 #include <netlink/smart_buffer.inline.h>
75 
76 NL_NAMESPACE_END
77 
78 #endif