PLCnext API Documentation 25.0.2.69
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

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

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 (const SharedMemory &arg)=delete
 
 SharedMemory (SharedMemory &&arg) noexcept=delete
 
SharedMemoryoperator= (const SharedMemory &arg)=delete
 
SharedMemoryoperator= (SharedMemory &&arg) noexcept=delete
 
 ~SharedMemory (void)
 Deallocates the memory for this management object but not the memory shared between processes.
 
void Dispose (void)
 Removes the shared memory from the system. if this instance owns it.
 
bool IsOwner (void) const
 Determines if this instance is the woner of the shared memory, i.e. ths shared memory was created by this instance. More...
 
const 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...
 
byte * Allocate (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 >
void Destroy (const char *name)
 Deallocates the object in the shared memory, also calling the objects destructor. More...
 
template<class T , typename ... TArgs>
Ptr< T > ConstructUnnamed (TArgs... args)
 Creates an unnamed object in the shared memory. More...
 
template<class T >
void DestroyUnnamed (SharedMemory::Ptr< T > ptr)
 Deallocates the unnamed 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.
 
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

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

Detailed Description

API to manage and manipulate memory shared between different processes

Constructor & Destructor Documentation

◆ SharedMemory() [1/2]

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

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.

Member Function Documentation

◆ AllMemoryDeallocated()

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

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)

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  )

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)

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.

◆ DestroyUnnamed()

template<class T >
void Arp::System::Commons::Ipc::SharedMemory::DestroyUnnamed ( SharedMemory::Ptr< T >  ptr)
inline

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

Parameters
pMemoryPointer to begin of previously allocated unnamed object.

◆ 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

Obtain the number of free bytes in the shared memory.

Returns
Amount of free bytes in the shared memory.

◆ GetName()

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

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

Returns the capacity of the shared memory in bytes.

Returns
Capacity of the shared memory.

◆ IsOwner()

bool Arp::System::Commons::Ipc::SharedMemory::IsOwner ( void  ) const

Determines if this instance is the woner of the shared memory, i.e. ths shared memory was created by this instance.

Returns
true if this instance is the owner of the shared memory.

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