63#ifndef ADOL_C__STOREMANAGER_H
64#define ADOL_C__STOREMANAGER_H
66#if defined(ADOLC_INTERNAL)
71#include <adolc/internal/adolc_settings.h>
74#include <forward_list>
77#include <boost/pool/pool_alloc.hpp>
115 virtual size_t size()
const = 0;
118 virtual void grow(
size_t mingrow = 0) = 0;
131#if defined(ADOLC_TRACK_ACTIVITY)
132 char activityTracking;
133 static char const *
const nowhere;
142#if defined(ADOLC_TRACK_ACTIVITY)
146 char *&actStorePtr,
size_t &
size,
size_t &numLives);
150 size_t &
size,
size_t &numLives);
165 virtual void grow(
size_t mingrow = 0);
177#if defined(ADOLC_TRACK_ACTIVITY)
178 char activityTracking{0};
179 static char const *
const nowhere{0};
194 std::forward_list<FreeBlock, boost::fast_pool_allocator<FreeBlock>>
indexFree{
205 unsigned int ensure_blockCallsSinceLastConsolidateBlocks;
209#if defined(ADOLC_TRACK_ACTIVITY)
241 virtual void grow(
size_t minGrow = 0);
269 groesse(initialeGroesse),
275 assert(
sizeof(
double) >=
sizeof(
void*));
276 assert(
sizeof(
double) >=
sizeof(Link));
277 std::cerr <<
"StoreManager::StoreManager()\n";
285 std::cerr <<
"StoreManager::~StoreManager()\n";
288 virtual inline size_t size()
const {
return anzahl; }
290 virtual inline size_t maxSize()
const {
return groesse; }
292 virtual locint
next_loc(
size_t n = 1) {
298 double *
const dPtr =
reinterpret_cast<double*
>(head);
301 locint
const result = dPtr - storePtr;
302 maxIndexUsed =
std::max((locint)maxIndexUsed, result);
307 assert(loc < groesse);
308 Link *returned =
reinterpret_cast<Link*
>(storePtr + loc);
309 returned->next = head;
315 size_t const alteGroesse = groesse;
317 assert(alteGroesse == initialeGroesse or
size() == alteGroesse);
318 std::cerr <<
"StoreManager::grow(): increase size to " << groesse <<
"\n";
319 double *
const oldStore = storePtr;
320 std::cerr <<
"StoreManager::grow(): allocate " << groesse *
sizeof(double) <<
" B\n";
321 storePtr =
new double[groesse];
323 if (alteGroesse != initialeGroesse) {
324 std::cerr <<
"StoreManager::grow(): copy values\n";
325 for ( ; i < alteGroesse; ++i) {
326 storePtr[i] = oldStore[i];
328 std::cerr <<
"StoreManager::grow(): free " << alteGroesse *
sizeof(double) <<
" B\n";
331 head =
reinterpret_cast<Link*
>(storePtr + i);
332 for ( ; i < groesse-1; ++i) {
333 reinterpret_cast<Link*
>(storePtr + i)->next
334 =
reinterpret_cast<Link*
>(storePtr + i + 1);
336 reinterpret_cast<Link*
>(storePtr + i)->next = 0;
Location allocator that tracks contiguous free blocks.
Definition storemanager.h:174
virtual ~StoreManagerLocintBlock()
StoreManagerLocintBlock(StoreManagerLocintBlock &&)=delete
double *& storePtr
Definition storemanager.h:176
virtual size_t maxSize() const
Definition storemanager.h:228
virtual void free_loc(size_t loc)
StoreManagerLocintBlock & operator=(const StoreManagerLocintBlock &)=delete
size_t & currentfill
Definition storemanager.h:201
StoreManagerLocintBlock & operator=(StoreManagerLocintBlock &&)=delete
StoreManagerLocintBlock(double *&storePtr, size_t &size, size_t &numlives)
virtual size_t size() const
Definition storemanager.h:226
virtual void grow(size_t minGrow=0)
virtual void ensure_block(size_t n)
std::forward_list< FreeBlock > indexFree
Definition storemanager.h:197
virtual size_t next_loc()
StoreManagerLocintBlock(const StoreManagerLocintBlock &)=delete
StoreManagerLocintBlock(const StoreManagerLocintBlock *const stm, double *&storePtr, size_t &size, size_t &numLives)
size_t & maxsize
Definition storemanager.h:200
virtual unsigned char storeType() const
Definition storemanager.h:229
Location allocator backed by a free-location index array.
Definition storemanager.h:128
virtual void ensure_block(size_t n)
size_t & currentfill
Definition storemanager.h:139
virtual bool realloc_on_next_loc() const
Definition storemanager.h:160
locint * indexFree
Definition storemanager.h:136
StoreManagerLocint(double *&storePtr, size_t &size, size_t &numlives)
virtual size_t maxSize() const
Definition storemanager.h:155
StoreManagerLocint(const StoreManagerLocint *const stm, double *&storePtr, size_t &size, size_t &numLives)
virtual ~StoreManagerLocint()
locint head
Definition storemanager.h:137
virtual void grow(size_t mingrow=0)
double *& storePtr
Definition storemanager.h:130
virtual locint next_loc()
virtual void free_loc(locint loc)
virtual size_t size() const
Definition storemanager.h:153
virtual unsigned char storeType() const
Definition storemanager.h:156
size_t & maxsize
Definition storemanager.h:138
Abstract allocator for locations in ADOL-C's active-value store.
Definition storemanager.h:86
virtual void grow(size_t mingrow=0)=0
void setStoreManagerControl(double gcTriggerRatio, size_t gcTriggerMaxSize)
Definition storemanager.h:105
StoreManager()
Definition storemanager.h:100
LocationMgrType
Definition storemanager.h:95
@ ADOLC_LOCATION_BLOCKS
Definition storemanager.h:96
@ ADOLC_LOCATION_SINGLETONS
Definition storemanager.h:97
size_t myGcTriggerMaxSize
Definition storemanager.h:91
virtual size_t size() const =0
size_t gcTriggerMaxSize() const
Definition storemanager.h:110
virtual void ensure_block(size_t n)=0
virtual size_t maxSize() const =0
double myGcTriggerRatio
Definition storemanager.h:90
static size_t get_initialSize()
Definition storemanager.h:117
virtual locint next_loc()=0
virtual unsigned char storeType() const =0
virtual void free_loc(locint)=0
virtual ~StoreManager()
Definition storemanager.h:101
static size_t const initialSize
Definition storemanager.h:89
double gcTriggerRatio() const
Definition storemanager.h:109
Descriptor for one contiguous range of free locations.
Definition storemanager.h:183
bool operator<(const struct FreeBlock &b) const
Definition storemanager.h:190
FreeBlock(const struct FreeBlock &block)
Definition storemanager.h:187
size_t next
Definition storemanager.h:184
FreeBlock()
Definition storemanager.h:186
size_t size
Definition storemanager.h:185
FreeBlock(const locint &n, const size_t &s)
Definition storemanager.h:189
static constexpr double max() noexcept
Definition adtb_types.h:1424