OpenDDS  Snapshot(2023/04/07-19:43)
Public Member Functions | Private Attributes | List of all members
OpenDDS::DCPS::FreeHeader Class Reference

#include <MemoryPool.h>

Inheritance diagram for OpenDDS::DCPS::FreeHeader:
Inheritance graph
[legend]
Collaboration diagram for OpenDDS::DCPS::FreeHeader:
Collaboration graph
[legend]

Public Member Functions

void init_free_block (unsigned int pool_size)
 
void set_free ()
 
FreeHeadersmaller_free (unsigned char *pool_base) const
 
FreeHeaderlarger_free (unsigned char *pool_base) const
 
void set_smaller_free (FreeHeader *next, unsigned char *pool_base)
 
void set_larger_free (FreeHeader *prev, unsigned char *pool_base)
 
- Public Member Functions inherited from OpenDDS::DCPS::AllocHeader
 AllocHeader ()
 
unsigned int size () const
 
unsigned int prev_size () const
 
bool is_free () const
 
unsigned char * ptr () const
 
AllocHeadernext_adjacent ()
 
AllocHeaderprev_adjacent ()
 
void allocate (size_t size)
 
void set_size (size_t size)
 
void set_prev_size (int size)
 
void set_allocated ()
 
void join_next ()
 

Private Attributes

size_t offset_smaller_free_
 Offset to smaller free block in size order. More...
 
size_t offset_larger_free_
 Offset to larger free block in size order. More...
 

Additional Inherited Members

- Protected Attributes inherited from OpenDDS::DCPS::AllocHeader
int alloc_size_
 Size of my buffer, negative if free, positive if alloc. More...
 
int prev_size_
 Size of previous buffer, or 0 if first, never negative. More...
 

Detailed Description

Header of free allocations - found at beginning of allocation inside pool. This forces a minimum allocation size, so that, when freed, header can be cast to this type.

Definition at line 67 of file MemoryPool.h.

Member Function Documentation

◆ init_free_block()

void OpenDDS::DCPS::FreeHeader::init_free_block ( unsigned int  pool_size)

Initialize the first AllocHeader with its size

Definition at line 90 of file MemoryPool.cpp.

References OpenDDS::DCPS::AllocHeader::alloc_size_, OpenDDS::DCPS::AllocHeader::AllocHeader(), and OpenDDS::DCPS::AllocHeader::prev_size_.

Referenced by OpenDDS::DCPS::MemoryPool::MemoryPool().

91 {
92  alloc_size_ = static_cast<int>(pool_size - sizeof(AllocHeader));
93  prev_size_ = 0;
94  set_free();
95 }
int prev_size_
Size of previous buffer, or 0 if first, never negative.
Definition: MemoryPool.h:61
int alloc_size_
Size of my buffer, negative if free, positive if alloc.
Definition: MemoryPool.h:60

◆ larger_free()

FreeHeader * OpenDDS::DCPS::FreeHeader::larger_free ( unsigned char *  pool_base) const

Get next equal or larger free block in size order

Definition at line 118 of file MemoryPool.cpp.

Referenced by OpenDDS::DCPS::MemoryPool::joinable_prev(), and OpenDDS::DCPS::MemoryPool::remove_free_alloc().

119 {
120  FreeHeader* result = NULL;
121  if (offset_larger_free_ != std::numeric_limits<size_t>::max()) {
122  result = reinterpret_cast<FreeHeader*>(pool_base + offset_larger_free_);
123  }
124  return result;
125 }
size_t offset_larger_free_
Offset to larger free block in size order.
Definition: MemoryPool.h:87

◆ set_free()

void OpenDDS::DCPS::FreeHeader::set_free ( )

Mark as free

Definition at line 98 of file MemoryPool.cpp.

References OpenDDS::DCPS::AllocHeader::alloc_size_, and OpenDDS::DCPS::AllocHeader::is_free().

Referenced by OpenDDS::DCPS::MemoryPool::pool_free().

99 {
100  // If this is newly freed
101  if (!is_free()) {
102  alloc_size_ *= -1;
103  set_smaller_free(NULL, NULL);
104  set_larger_free(NULL, NULL);
105  }
106 }
void set_smaller_free(FreeHeader *next, unsigned char *pool_base)
Definition: MemoryPool.cpp:128
void set_larger_free(FreeHeader *prev, unsigned char *pool_base)
Definition: MemoryPool.cpp:138
int alloc_size_
Size of my buffer, negative if free, positive if alloc.
Definition: MemoryPool.h:60

◆ set_larger_free()

void OpenDDS::DCPS::FreeHeader::set_larger_free ( FreeHeader prev,
unsigned char *  pool_base 
)

Set the next equal or larger free block in size order

Definition at line 138 of file MemoryPool.cpp.

Referenced by OpenDDS::DCPS::MemoryPool::insert_free_alloc(), and OpenDDS::DCPS::MemoryPool::remove_free_alloc().

139 {
140  if (prev) {
141  offset_larger_free_ = reinterpret_cast<unsigned char*>(prev) - pool_base;
142  } else {
143  offset_larger_free_ = std::numeric_limits<size_t>::max();
144  }
145 }
size_t offset_larger_free_
Offset to larger free block in size order.
Definition: MemoryPool.h:87

◆ set_smaller_free()

void OpenDDS::DCPS::FreeHeader::set_smaller_free ( FreeHeader next,
unsigned char *  pool_base 
)

Set the next equal or smaller free block in size order

Definition at line 128 of file MemoryPool.cpp.

Referenced by OpenDDS::DCPS::MemoryPool::insert_free_alloc(), and OpenDDS::DCPS::MemoryPool::remove_free_alloc().

129 {
130  if (next) {
131  offset_smaller_free_ = reinterpret_cast<unsigned char*>(next) - pool_base;
132  } else {
133  offset_smaller_free_ = std::numeric_limits<size_t>::max();
134  }
135 }
size_t offset_smaller_free_
Offset to smaller free block in size order.
Definition: MemoryPool.h:86

◆ smaller_free()

FreeHeader * OpenDDS::DCPS::FreeHeader::smaller_free ( unsigned char *  pool_base) const

Get next equal or smaller free block in size order

Definition at line 108 of file MemoryPool.cpp.

Referenced by OpenDDS::DCPS::FreeIndex::find(), OpenDDS::DCPS::MemoryPool::insert_free_alloc(), OpenDDS::DCPS::MemoryPool::joinable_prev(), OpenDDS::DCPS::FreeIndex::node_index(), and OpenDDS::DCPS::MemoryPool::remove_free_alloc().

109 {
110  FreeHeader* result = NULL;
111  if (offset_smaller_free_ != std::numeric_limits<size_t>::max()) {
112  result = reinterpret_cast<FreeHeader*>(pool_base + offset_smaller_free_);
113  }
114  return result;
115 }
size_t offset_smaller_free_
Offset to smaller free block in size order.
Definition: MemoryPool.h:86

Member Data Documentation

◆ offset_larger_free_

size_t OpenDDS::DCPS::FreeHeader::offset_larger_free_
private

Offset to larger free block in size order.

Definition at line 87 of file MemoryPool.h.

◆ offset_smaller_free_

size_t OpenDDS::DCPS::FreeHeader::offset_smaller_free_
private

Offset to smaller free block in size order.

Definition at line 86 of file MemoryPool.h.


The documentation for this class was generated from the following files: