47#ifdef KICAD_GAL_PROFILE 
   68    assert( aItem != 
nullptr );
 
   70    unsigned int itemSize = aItem->
GetSize();
 
 
   81    assert( 
m_item != 
nullptr );
 
   83    unsigned int itemSize = 
m_item->GetSize();
 
   89        int itemOffset = 
m_item->GetOffset();
 
  106#if CACHED_CONTAINER_TEST > 1 
 
  114    assert( 
m_item != 
nullptr );
 
  120    unsigned int itemSize = 
m_item->GetSize();
 
  121    unsigned int newSize = itemSize + aSize;
 
  136    m_item->setSize( newSize );
 
  141#if CACHED_CONTAINER_TEST > 0 
  144#if CACHED_CONTAINER_TEST > 2 
 
  155    assert( aItem != 
nullptr );
 
  173#if CACHED_CONTAINER_TEST > 0 
 
  202    for( ITEMS::iterator it = 
m_items.begin(); it != 
m_items.end(); ++it )
 
  203        ( *it )->setSize( 0 );
 
 
  218    unsigned int itemSize = 
m_item->GetSize();
 
  221    FREE_CHUNK_MAP::iterator newChunk = 
m_freeChunks.lower_bound( aSize );
 
  251    assert( newChunkSize >= aSize );
 
 
  280    ITEMS::iterator it, it_end;
 
  296                int itemOffset = item->GetOffset();
 
  297                int itemSize = item->GetSize();
 
  303                item->setOffset( newOffset );
 
  306                newOffset += itemSize;
 
  310            if( 
m_item->GetSize() > 0 )
 
  314                m_item->setOffset( newOffset );
 
  323        __except( GetExceptionCode() == STATUS_ACCESS_VIOLATION ? EXCEPTION_EXECUTE_HANDLER
 
  324                                                                : EXCEPTION_CONTINUE_SEARCH )
 
  326            throw std::runtime_error(
 
  327                    "Access violation in defragment. This is usually an indicator of " 
  328                    "system or GPU memory running low." );
 
 
  343#ifdef KICAD_GAL_PROFILE 
  348    std::list<CHUNK> freeChunks;
 
  350    FREE_CHUNK_MAP::const_iterator it, it_end;
 
  354        freeChunks.emplace_back( it->second, it->first );
 
  360    std::list<CHUNK>::const_iterator itf, itf_end;
 
  361    unsigned int                     offset = freeChunks.front().first;
 
  362    unsigned int                     size = freeChunks.front().second;
 
  363    freeChunks.pop_front();
 
  365    for( itf = freeChunks.begin(), itf_end = freeChunks.end(); itf != itf_end; ++itf )
 
  367        if( itf->first == offset + size )
 
  387#if CACHED_CONTAINER_TEST > 0 
 
  398    m_freeChunks.insert( std::make_pair( aSize, aOffset ) );
 
 
  415#ifdef KICAD_GAL_PROFILE 
  417    unsigned int             freeSpace = 0;
 
  418    FREE_CHUNK_MAP::iterator itf;
 
  426    unsigned int    used_space = 0;
 
  430        used_space += ( *itr )->GetSize();
 
 
unsigned int m_chunkOffset
Maximal vertex index number stored in the container.
 
void addFreeChunk(unsigned int aOffset, unsigned int aSize)
Add a chunk marked as a free space.
 
int getChunkSize(const CHUNK &aChunk) const
Return the size of a chunk.
 
void mergeFreeChunks()
Look for consecutive free memory chunks and merges them, decreasing fragmentation of memory.
 
void showFreeChunks()
Debug & test functions.
 
VERTEX_ITEM * m_item
Properties of currently modified chunk & item.
 
FREE_CHUNK_MAP m_freeChunks
Stored VERTEX_ITEMs.
 
void defragment(VERTEX *aTarget)
Transfer all stored data to a new buffer, removing empty spaces between the data chunks in the contai...
 
virtual void FinishItem() override
Clean up after adding an item.
 
virtual void Delete(VERTEX_ITEM *aItem) override
Remove all data stored in the container and restores its original state.
 
unsigned int getChunkOffset(const CHUNK &aChunk) const
Return the offset of a chunk.
 
virtual VERTEX * Allocate(unsigned int aSize) override
Return allocated space for the requested number of vertices associated with the current item (set wit...
 
virtual void Clear() override
Remove all data stored in the container and restores its original state.
 
virtual bool defragmentResize(unsigned int aNewSize)=0
Remove empty spaces between chunks and optionally resizes the container.
 
virtual void SetItem(VERTEX_ITEM *aItem) override
Clean up after adding an item.
 
CACHED_CONTAINER(unsigned int aSize=DEFAULT_SIZE)
 
virtual bool IsMapped() const =0
Return true if vertex buffer is currently mapped.
 
ITEMS m_items
Currently modified item.
 
bool reallocate(unsigned int aSize)
Resize the chunk that stores the current item to the given size.
 
unsigned int m_initialSize
Actual storage memory.
 
unsigned int m_currentSize
Store the initial size, so it can be resized to this on Clear()
 
unsigned int m_freeSpace
Current container size, expressed in vertices.
 
unsigned int usedSpace() const
Return size of the used memory space.
 
VERTEX_CONTAINER(unsigned int aSize=DEFAULT_SIZE)
 
bool m_dirty
Default initial size of a container (expressed in vertices)
 
void setSize(unsigned int aSize)
Set data size in the container.
 
unsigned int GetOffset() const
Return data offset in the container.
 
unsigned int GetSize() const
Return information about number of vertices stored.
 
A small class to help profiling.
 
The Cairo implementation of the graphics abstraction layer.
 
static constexpr size_t VERTEX_SIZE
 
wxString result
Test unit parsing edge cases and error handling.
 
Class to handle an item held in a container.