PLCnext API Documentation  22.6.0.43
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Public Types | Public Member Functions | Protected Attributes | List of all members
Arp::System::Commons::Ipc::SharedMemory Class Reference

API to manage and manipulate memory shared between different processes More...

#include <SharedMemory.hpp>

Inheritance diagram for Arp::System::Commons::Ipc::SharedMemory:
Inheritance graph

Public Types

typedef boost::interprocess::managed_shared_memory SharedMemoryImpl
 
typedef SharedMemoryImpl::segment_manager SegmentManager
 
typedef boost::interprocess::permissions SharedMemoryPermission
 
template<class T >
using Ptr = boost::interprocess::offset_ptr< T >
 Returned pointer types are shared memory based offset pointer. More...
 

Public Member Functions

 SharedMemory (const char *name)
 Opens an existing shared memory. More...
 
 SharedMemory (const char *name, size_t memorySize)
 Creates an non-existing instance, throws if yet exists. More...
 
 ~SharedMemory (void)=default
 Deallocates the memory for this management object but not the memory shared between processes. More...
 
void Remove (void)
 Removes the shared memory from the system. More...
 
const Arp::StringGetName (void) const
 Returns the name of the memory object. More...
 
size_t GetSize (void) const
 Returns the capacity of the shared memory in bytes. More...
 
byteAllocate (size_t size)
 Tries to allocate size amount of bytes in the memory. More...
 
void Deallocate (byte *pMemory)
 Marks the memory pointed to by pMemory available for new allocation requests. More...
 
template<class T >
Ptr< T > Get (const char *name)
 Tries to find a previously allocated named object. More...
 
template<class T , typename ... TArgs>
Ptr< T > GetOrConstruct (const char *name, TArgs... args)
 Tries to find object identified by name, creates a new one if the object does not exists yet. More...
 
template<class T , typename ... TArgs>
Ptr< T > Construct (const char *name, TArgs... args)
 Creates a named object in the shared memory. More...
 
template<class T , typename ... TArgs>
Ptr< T > ConstructUnnamed (TArgs... args)
 Creates an unnamed object in the shared memory. More...
 
template<class T >
void Destroy (const char *name)
 Deallocates the object in the shared memory, also calling the objects destructor. More...
 
size_t GetFreeMemory (void) const
 Obtain the number of free bytes in the shared memory. More...
 
void ZeroFreeMemory (void)
 Writes zero in all bytes not yet allocated. More...
 
bool AllMemoryDeallocated (void)
 Checks if all memory has been deallocated. More...
 
bool CheckSanity (void)
 Performs a sanity check over the shared memory. More...
 

Protected Attributes

Arp::String memoryName
 Name of memory identifying the shared memory inside the operating system. More...
 
SharedMemoryImpl sharedMemoryImpl
 Actual implementation of the shared memory functionality. More...
 

Detailed Description

API to manage and manipulate memory shared between different processes

Member Typedef Documentation

◆ Ptr

template<class T >
using Arp::System::Commons::Ipc::SharedMemory::Ptr = boost::interprocess::offset_ptr<T>

Returned pointer types are shared memory based offset pointer.

Constructor & Destructor Documentation

◆ SharedMemory() [1/2]

Arp::System::Commons::Ipc::SharedMemory::SharedMemory ( const char *  name)
inline

Opens an existing shared memory.

Parameters
nameName identifing the shared memory to be opened.

◆ SharedMemory() [2/2]

Arp::System::Commons::Ipc::SharedMemory::SharedMemory ( const char *  name,
size_t  memorySize 
)

Creates an non-existing instance, throws if yet exists.

Parameters
nameName identifing the shared memory to be opened.
memorySizeThe memory size in bytes allocated for the new shared memory.

◆ ~SharedMemory()

Arp::System::Commons::Ipc::SharedMemory::~SharedMemory ( void  )
default

Deallocates the memory for this management object but not the memory shared between processes.

Member Function Documentation

◆ AllMemoryDeallocated()

bool Arp::System::Commons::Ipc::SharedMemory::AllMemoryDeallocated ( void  )
inline

Checks if all memory has been deallocated.

Returns
true if all memory is deallocated, otherwise false is returned.

◆ Allocate()

byte * Arp::System::Commons::Ipc::SharedMemory::Allocate ( size_t  size)
inline

Tries to allocate size amount of bytes in the memory.

Parameters
sizeThe desired size in bytes of the allocated memory block.
Returns
Pointer to allocated memory area.

◆ CheckSanity()

bool Arp::System::Commons::Ipc::SharedMemory::CheckSanity ( void  )
inline

Performs a sanity check over the shared memory.

Returns
True if no errors are detected, otherwise false is returned.

◆ Construct()

template<class T , typename ... TArgs>
SharedMemory::Ptr< T > Arp::System::Commons::Ipc::SharedMemory::Construct ( const char *  name,
TArgs...  args 
)
inline

Creates a named object in the shared memory.

Parameters
nameName associated with the object.
argsArguments passed to the objects constructor.
Returns
Pointer to created object on success, otherwise nullptr is returned.

◆ ConstructUnnamed()

template<class T , typename ... TArgs>
SharedMemory::Ptr< T > Arp::System::Commons::Ipc::SharedMemory::ConstructUnnamed ( TArgs...  args)
inline

Creates an unnamed object in the shared memory.

Parameters
argsArguments passed to the objects constructor.
Returns
Pointer to created object on success, otherwise nullptr is returned.

◆ Deallocate()

void Arp::System::Commons::Ipc::SharedMemory::Deallocate ( byte pMemory)
inline

Marks the memory pointed to by pMemory available for new allocation requests.

Parameters
pMemoryPointer to begin of previously allocated memory area.

◆ Destroy()

template<class T >
void Arp::System::Commons::Ipc::SharedMemory::Destroy ( const char *  name)
inline

Deallocates the object in the shared memory, also calling the objects destructor.

Parameters
nameName identifying the object to destroy.

◆ Get()

template<class T >
SharedMemory::Ptr< T > Arp::System::Commons::Ipc::SharedMemory::Get ( const char *  name)
inline

Tries to find a previously allocated named object.

Returns
Pointer to object on success, otherwise a nullptr is returned.

◆ GetFreeMemory()

size_t Arp::System::Commons::Ipc::SharedMemory::GetFreeMemory ( void  ) const
inline

Obtain the number of free bytes in the shared memory.

Returns
Amount of free bytes in the shared memory.

◆ GetName()

const Arp::String & Arp::System::Commons::Ipc::SharedMemory::GetName ( void  ) const
inline

Returns the name of the memory object.

Returns
Name of memory object.

◆ GetOrConstruct()

template<class T , typename ... TArgs>
SharedMemory::Ptr< T > Arp::System::Commons::Ipc::SharedMemory::GetOrConstruct ( const char *  name,
TArgs...  args 
)
inline

Tries to find object identified by name, creates a new one if the object does not exists yet.

Parameters
nameName identifying the object in the memory after allocation.
argsArguments passed to constructor of object.
Returns
Pointer to object on success, otherwise a nullptr is returned.

◆ GetSize()

size_t Arp::System::Commons::Ipc::SharedMemory::GetSize ( void  ) const
inline

Returns the capacity of the shared memory in bytes.

Returns
Capacity of the shared memory.

◆ Remove()

void Arp::System::Commons::Ipc::SharedMemory::Remove ( void  )
inline

Removes the shared memory from the system.

◆ ZeroFreeMemory()

void Arp::System::Commons::Ipc::SharedMemory::ZeroFreeMemory ( void  )
inline

Writes zero in all bytes not yet allocated.

Member Data Documentation

◆ memoryName

Arp::String Arp::System::Commons::Ipc::SharedMemory::memoryName
protected

Name of memory identifying the shared memory inside the operating system.

◆ sharedMemoryImpl

SharedMemoryImpl Arp::System::Commons::Ipc::SharedMemory::sharedMemoryImpl
protected

Actual implementation of the shared memory functionality.


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