Scroom  0.14
Scroom::MemoryBlobs::PageProvider Class Reference

#include <memoryblobs.hh>

Inheritance diagram for Scroom::MemoryBlobs::PageProvider:
Inheritance graph
Collaboration diagram for Scroom::MemoryBlobs::PageProvider:
Collaboration graph

Classes

class  MarkPageFree
 

Public Types

using Ptr = boost::shared_ptr< PageProvider >
 

Public Member Functions

Page::Ptr getFreePage ()
 
size_t getPageSize () const
 
- Public Member Functions inherited from Scroom::Utils::Base
 Base ()=default
 
 Base (const Base &)=delete
 
 Base (Base &&)=delete
 
Baseoperator= (const Base &)=delete
 
Baseoperator= (Base &&)=delete
 
virtual ~Base ()=default
 
template<typename R >
boost::shared_ptr< R > shared_from_this ()
 
template<typename R >
boost::shared_ptr< R const > shared_from_this () const
 

Static Public Member Functions

static Ptr create (size_t blockCount, size_t blockSize)
 

Private Member Functions

 PageProvider (size_t blockCount, size_t blockSize)
 
void markPageFree (Scroom::MemoryBlocks::Page *page)
 

Private Attributes

size_t blockCount
 
size_t blockSize
 
Scroom::MemoryBlocks::BlockFactoryInterface::Ptr blockFactoryInterface
 
Scroom::MemoryBlocks::PageList allPages
 
std::list< Scroom::MemoryBlocks::Page * > freePages
 
boost::mutex mut
 

Friends

class MarkPageFree
 

Member Typedef Documentation

◆ Ptr

Constructor & Destructor Documentation

◆ PageProvider()

Scroom::MemoryBlobs::PageProvider::PageProvider ( size_t  blockCount,
size_t  blockSize 
)
private
31  : blockCount(blockCount_)
32  , blockSize(blockSize_)
34  {
35  }

Referenced by create().

Here is the caller graph for this function:

Member Function Documentation

◆ create()

PageProvider::Ptr Scroom::MemoryBlobs::PageProvider::create ( size_t  blockCount,
size_t  blockSize 
)
static
38  {
39  return Ptr(new PageProvider(blockCount, blockSize));
40  }

Referenced by BOOST_AUTO_TEST_CASE(), and createProvider().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getFreePage()

Page::Ptr Scroom::MemoryBlobs::PageProvider::getFreePage ( )
43  {
44  boost::mutex::scoped_lock const lock(mut);
45  if(freePages.empty())
46  {
48  for(Scroom::MemoryBlocks::Page& p: pages)
49  {
50  freePages.push_back(&p);
51  }
52  allPages.splice(allPages.end(), pages);
53  }
54 
55  Page::Ptr result(freePages.front(), MarkPageFree(shared_from_this<PageProvider>()));
56  freePages.pop_front();
57 
58  return result;
59  }

◆ getPageSize()

size_t Scroom::MemoryBlobs::PageProvider::getPageSize ( ) const
61 { return blockSize; }

◆ markPageFree()

void Scroom::MemoryBlobs::PageProvider::markPageFree ( Scroom::MemoryBlocks::Page page)
private
64  {
65  boost::mutex::scoped_lock const lock(mut);
66  freePages.push_front(p);
67  }

Friends And Related Function Documentation

◆ MarkPageFree

friend class MarkPageFree
friend

Member Data Documentation

◆ allPages

Scroom::MemoryBlocks::PageList Scroom::MemoryBlobs::PageProvider::allPages
private

Referenced by getFreePage().

◆ blockCount

size_t Scroom::MemoryBlobs::PageProvider::blockCount
private

Referenced by create(), and getFreePage().

◆ blockFactoryInterface

Scroom::MemoryBlocks::BlockFactoryInterface::Ptr Scroom::MemoryBlobs::PageProvider::blockFactoryInterface
private

Referenced by getFreePage().

◆ blockSize

size_t Scroom::MemoryBlobs::PageProvider::blockSize
private

Referenced by create(), getFreePage(), and getPageSize().

◆ freePages

std::list<Scroom::MemoryBlocks::Page*> Scroom::MemoryBlobs::PageProvider::freePages
private

Referenced by getFreePage(), and markPageFree().

◆ mut

boost::mutex Scroom::MemoryBlobs::PageProvider::mut
private

Referenced by getFreePage(), and markPageFree().


The documentation for this class was generated from the following files:
Scroom::MemoryBlobs::PageProvider::PageProvider
PageProvider(size_t blockCount, size_t blockSize)
Definition: memoryblobs.cc:30
Scroom::MemoryBlobs::PageProvider::Ptr
boost::shared_ptr< PageProvider > Ptr
Definition: memoryblobs.hh:41
Scroom::MemoryBlobs::PageProvider::freePages
std::list< Scroom::MemoryBlocks::Page * > freePages
Definition: memoryblobs.hh:48
Scroom::MemoryBlocks::Page
Definition: blockallocator.hh:29
Scroom::MemoryBlobs::PageProvider::allPages
Scroom::MemoryBlocks::PageList allPages
Definition: memoryblobs.hh:47
Scroom::MemoryBlobs::PageProvider::MarkPageFree
friend class MarkPageFree
Definition: memoryblobs.hh:62
Scroom::MemoryBlobs::PageProvider::mut
boost::mutex mut
Definition: memoryblobs.hh:49
Scroom::MemoryBlocks::PageList
std::list< Page > PageList
Definition: blockallocator.hh:41
Scroom::MemoryBlobs::Page::Ptr
boost::shared_ptr< Scroom::MemoryBlocks::Page > Ptr
Definition: memoryblobs.hh:34
Scroom::MemoryBlocks::getBlockFactoryInterface
BlockFactoryInterface::Ptr getBlockFactoryInterface()
Definition: swapbasedblockallocator.cc:112
Scroom::MemoryBlobs::PageProvider::blockSize
size_t blockSize
Definition: memoryblobs.hh:45
Scroom::MemoryBlobs::PageProvider::blockFactoryInterface
Scroom::MemoryBlocks::BlockFactoryInterface::Ptr blockFactoryInterface
Definition: memoryblobs.hh:46
Scroom::MemoryBlobs::PageProvider::blockCount
size_t blockCount
Definition: memoryblobs.hh:44