Kea  1.9.9-git
memory_segment.h
Go to the documentation of this file.
1 // Copyright (C) 2012-2015 Internet Systems Consortium, Inc. ("ISC")
2 //
3 // This Source Code Form is subject to the terms of the Mozilla Public
4 // License, v. 2.0. If a copy of the MPL was not distributed with this
5 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
6 
7 #ifndef MEMORY_SEGMENT_H
8 #define MEMORY_SEGMENT_H
9 
10 #include <exceptions/exceptions.h>
11 
12 #include <utility>
13 
14 #include <stdlib.h>
15 
16 namespace isc {
17 namespace util {
18 
22 public:
23  MemorySegmentOpenError(const char* file, size_t line, const char* what) :
24  isc::Exception(file, line, what) {}
25 };
26 
31 class MemorySegmentGrown : public Exception {
32 public:
33  MemorySegmentGrown(const char* file, size_t line, const char* what) :
34  isc::Exception(file, line, what) {}
35 };
36 
39 class MemorySegmentError : public Exception {
40 public:
41  MemorySegmentError(const char* file, size_t line, const char* what) :
42  isc::Exception(file, line, what) {}
43 };
44 
55 public:
57  virtual ~MemorySegment() {}
58 
118  virtual void* allocate(size_t size) = 0;
119 
145  virtual void deallocate(void* ptr, size_t size) = 0;
146 
152  virtual bool allMemoryDeallocated() const = 0;
153 
222  bool setNamedAddress(const char* name, void* addr) {
223  // This public method implements common validation. The actual
224  // work specific to the derived segment is delegated to the
225  // corresponding protected method.
226  validateName(name);
227  return (setNamedAddressImpl(name, addr));
228  }
229 
231  typedef std::pair<bool, void*> NamedAddressResult;
232 
258  NamedAddressResult getNamedAddress(const char* name) const {
259  // This public method implements common validation. The actual
260  // work specific to the derived segment is delegated to the
261  // corresponding protected method.
262  validateName(name);
263  return (getNamedAddressImpl(name));
264  }
265 
286  bool clearNamedAddress(const char* name) {
287  // This public method implements common validation. The actual
288  // work specific to the derived segment is delegated to the
289  // corresponding protected method.
290  validateName(name);
291  return (clearNamedAddressImpl(name));
292  }
293 
294 private:
303  static void validateName(const char* name) {
304  if (!name) {
305  isc_throw(InvalidParameter, "NULL is invalid for a name.");
306  } else if (*name == '\0') {
307  isc_throw(InvalidParameter, "Empty names are invalid.");
308  } else if (*name == '_') {
309  isc_throw(InvalidParameter,
310  "Names beginning with '_' are reserved for "
311  "internal use only.");
312  }
313  }
314 
315 protected:
317  virtual bool setNamedAddressImpl(const char* name, void* addr) = 0;
318 
320  virtual NamedAddressResult getNamedAddressImpl(const char* name) const = 0;
321 
323  virtual bool clearNamedAddressImpl(const char* name) = 0;
324 };
325 
326 } // namespace util
327 } // namespace isc
328 
329 #endif // MEMORY_SEGMENT_H
330 
331 // Local Variables:
332 // mode: c++
333 // End:
MemorySegmentError(const char *file, size_t line, const char *what)
General error that can be thrown by a MemorySegment implementation.
A generic exception that is thrown if a parameter given to a method or function is considered invalid...
MemorySegmentOpenError(const char *file, size_t line, const char *what)
virtual void deallocate(void *ptr, size_t size)=0
Free/release a segment of memory.
bool clearNamedAddress(const char *name)
Delete a name previously associated with a segment address.
NamedAddressResult getNamedAddress(const char *name) const
Return the address in the segment that has the given name.
std::pair< bool, void * > NamedAddressResult
Type definition for result returned by getNamedAddress()
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
Memory Segment Class.
bool setNamedAddress(const char *name, void *addr)
Associate specified address in the segment with a given name.
virtual bool setNamedAddressImpl(const char *name, void *addr)=0
Implementation of setNamedAddress beyond common validation.
virtual bool allMemoryDeallocated() const =0
Check if all allocated memory was deallocated.
Exception that can be thrown when constructing a MemorySegment object.
virtual bool clearNamedAddressImpl(const char *name)=0
Implementation of clearNamedAddress beyond common validation.
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
virtual NamedAddressResult getNamedAddressImpl(const char *name) const =0
Implementation of getNamedAddress beyond common validation.
This is a base class for exceptions thrown from the DNS library module.
Defines the logger used by the top-level component of kea-dhcp-ddns.
virtual ~MemorySegment()
Destructor.
virtual void * allocate(size_t size)=0
Allocate/acquire a fragment of memory.
Exception that is thrown, when allocating space in a MemorySegment results in growing the underlying ...
MemorySegmentGrown(const char *file, size_t line, const char *what)