AAO DRAMA/DRAMA2 C++ Interface
Public Member Functions | List of all members
drama::BulkDataSds Class Reference

Detailed Description

Defines and optionally creates a shared memory section containing an SDS structure.

Shared memory sections are used by DRAMA in the handling of bulk data transfers.

If Type is set to ShareType::Create, then this class's constructor creates a temporary shared memory section of the size specified in some suitable form for the system it is running on. The caller has no control over the details of the shared memory section. In this case, the Name and Key arguments, and any preset value at the location specified by the Address argument are all ignored. A new section will be created and mapped.

VxWorks: The mapped section is just a section of memory, starting at a specified address. Type should be ShareType::Global. Name should be an empty string, and Key is ignored. If Create is specified, Address is ignored, and a suitably sized area of memory is allocated. If Create is passed as false, then Address should contain the address of the memory section in question. Under VxWorks, this is what is generated by ShareType::Default.

UNIX: The mapped section can be created as System V shared memory, in which case Type should be ShareType::SHMem , or as a file accessed through mmap(), in which case Type should be ShareType::MMap. If Type is ShareType::SHMem, Key specifies the identifier for the shared memory and Name should be an empty string. If Type is ShareType::MMap, Name should be the full name of the file, and Key is ignored. Address is ignored in both cases. On UNIX, one of these types will be what is provided by ShareType::Default.

Author
Tony Farrell, AAO
Revision
1.45
Date
22-Feb-2016 14:09:57+11
Id
ACMM:Drama2/drama/bulkdata.hh,v 1.45 22-Feb-2016 14:09:57+11 tjf

#include "bulkdata.hh"

Inheritance diagram for drama::BulkDataSds:
drama::BulkData drama::sds::Id

Public Member Functions

 BulkDataSds ()
 Default constructor. More...
 
 BulkDataSds (std::weak_ptr< Task > theTask, const sds::Id &SdsTemplate, ShareType type=ShareType::Create, bool Create=true, bool DeleteOnDestruct=true, void *Address=nullptr, const std::string &Name="", int Key=0)
 Define a bulk data shared memory segment of the specified type for use with DRAMA 2 methods which can send bulk data, for transfer of an SDS structure. More...
 
- Public Member Functions inherited from drama::BulkData
 BulkData ()
 Default constructor. More...
 
 BulkData (std::weak_ptr< Task > theTask, long Size, ShareType type=ShareType::Create, bool Create=true, bool DeleteOnDestruct=true, void *Address=nullptr, const std::string &Name="", int Key=0)
 Define a bulk data shared memory segment of the specified type for use with DRAMA 2 methods which can send bulk data. More...
 
 BulkData (std::weak_ptr< Task > theTask, const DitsBulkReportInfoType &info)
 Define a bulk data shared memory segment based on a DitsBulkReportInfoType item. More...
 
 BulkData (const BulkData &source)=delete
 Copy constructor - deleted. More...
 
 BulkData (BulkData &&source) noexcept
 Move copy constructor. More...
 
virtual ~BulkData ()
 Destructor. More...
 
template<typename T >
T * Data (unsigned long *nitems=nullptr)
 Return a pointer to the actual data. More...
 
DitsSharedMemInfoType & GetDitsSharedMemInfo ()
 Return a reference to the DitsSharedMemInfoType object managed by this. More...
 
BulkDataoperator= (const BulkData &rhs)=delete
 Assignment operator - deleted. More...
 
BulkDataoperator= (BulkData &&rhs) noexcept
 Move assignment operator. More...
 
- Public Member Functions inherited from drama::sds::Id
 Id (const Id &source)=delete
 Copy constructor - deleted. More...
 
 Id (Id &&source) noexcept
 Move copy constructor. More...
 
 Id ()
 Default constructor. More...
 
virtual ~Id ()
 sds::Id Destructor. More...
 
template<typename ContainerType >
void AddToArgCmdStruct (const ContainerType &values, const unsigned firstArg=1)
 Insert a set of values from a container into an SDS structure in in the DRAMA Command style. More...
 
template<typename T >
void ArrayAccess (ArrayAccessHelper< T > *const data) const
 Access the data of a single dimensional SDS primitive array item of a specified number of elements. More...
 
template<typename T >
void ArrayAccess (const unsigned long nitems, sds::ArrayAccessHelper< T > *const data) const
 Access the data of a single dimensional SDS primitive item array of a specified number of elements. More...
 
template<typename T , class ContainerType >
void ArrayAccess (ArrayAccessHelper< T > *const data, long ndims, ContainerType *dims) const
 Access the data of an SDS primitive item array. More...
 
template<typename T , class ContainerType >
void ArrayAccess (ArrayAccessHelper< T > *const data, ContainerType *dims) const
 Access the data of an SDS primitive item array. More...
 
template<class ContainerType >
Id Cell (const ContainerType &indicies, bool throwOnNotFound=true) const
 Factory constructor method Constructor that returns a cell of an existing id which must refer to an SDS array. More...
 
template<class ContainerType >
void CheckItem (SdsCodeType code, const ContainerType &dims) const
 Check an item has a required structure. More...
 
virtual void ClearDelete ()
 Indicate the underlying SDS structure should NOT be deleted when the sds::Id object is destroyed. More...
 
virtual Id Copy () const
 Factory constructor method Id Copy constructor. More...
 
virtual SdsIdType COut (const bool outlives, bool *const free=0, bool *const del=0, bool *const readfree=0)
 Return this item as an SdsIdType for return to C code. More...
 
template<class ContainerType >
Id CreateChildArray (const std::string &name, const SdsCodeType code, const ContainerType &dims, const std::string &extra="") const
 Factory constructor method Constructor which creates a new child item which is an array. More...
 
virtual Id CreateChildItem (const std::string &name, const SdsCodeType code, const std::string &extra="") const
 Factory constructor method which creates a new (non-array) child item. More...
 
virtual void Delete ()
 Delete the SDS item. More...
 
virtual bool Exists (const std::string &name) const
 Determine if a named item exists in a structure. More...
 
template<class ContainerType >
void Export (ContainerType *container) const
 Export the SDS structure into a buffer. More...
 
template<class ContainerType >
void ExportDefined (ContainerType *container) const
 Export the SDS structure into a buffer, defining any undefined data. More...
 
virtual void Extract ()
 Extract the SDS structure from its parent. More...
 
virtual void FillArray (const Id &elem)
 Fill out the contents of this object, which is a structured array. More...
 
virtual Id Find (const std::string &name, bool throwOnNotFound=true) const
 Factory constructor method Constructor which returns a reference to a named item. More...
 
virtual void Flush ()
 Flush data modified by pointer. More...
 
template<typename T >
void Get (const unsigned long length, T *const data, unsigned long *actlen=nullptr, const unsigned long offset=0) const
 Get data from an SDS item. More...
 
template<typename T >
void Get (const std::string &name, T *value) const
 Fetch primitive value from a named component of the structure. More...
 
template<typename T >
void Get (T *value) const
 Fetch primitive value from the component. More...
 
virtual SdsCodeType GetCode () const
 Return the code of the SDS item. More...
 
template<class ContainerType >
void GetDims (ContainerType *dims) const
 Return the dimensions of the SDS item. More...
 
virtual double GetDouble () const
 If the SDS item refers to a scalar value, convert it to a double item. More...
 
virtual std::string GetExtra () const
 Get extra data from an SDS item. More...
 
virtual int GetInt () const
 If the SDS item refers to a scalar value, convert it to an integer. More...
 
virtual long GetLong () const
 If the SDS item refers to a scalar value, convert it to long integer. More...
 
virtual std::string GetName () const
 Return the name of the SDS item. More...
 
unsigned GetNumItems () const
 Return the number of components in an SDS structure. More...
 
std::string GetString () const
 If the SDS item refers to a scalar value or a character string, convert it to a string item. More...
 
virtual unsigned int GetUInt () const
 If the SDS item refers to a scalar value, convert it to an unsigned integer. More...
 
virtual unsigned long GetULong () const
 If the SDS item refers to a scalar value, convert it to an unsigned long integer. More...
 
virtual Id Index (const long index, bool throwOnNotFound=true) const
 Factory constructor method Constructor which returns an id to a structured item indexed by position. More...
 
virtual void Insert (Id &to_insert)
 Insert an SDS object into this object. More...
 
template<class ContainerType >
void Insert (Id &to_insert, const ContainerType &dims)
 Insert an SDS object into this object, which is a structured array. More...
 
virtual bool IsExternal () const
 Determine if the SDS structure is external. More...
 
virtual void List () const
 List the contents of the structure to standard output. More...
 
virtual void List (FILE *to) const
 List the contents of the structure to a C file. More...
 
virtual void List (std::ostream &strm, int lineMaxLen=100) const
 List the contents of the structure to an output stream. More...
 
virtual void List (PrintObjectPnt *printer, int lineMaxLen=100) const
 List the contents of the structure via a PrintObjectPnt object. More...
 
virtual void List (const PrintObjectCR &printer, int lineMaxLen=100) const
 List the contents of the structure via a PrintObjectCR. More...
 
 operator bool () const
 Operator which tests if an item is valid. More...
 
 operator SdsIdType () const
 Operator which returns the underlying SDS id. More...
 
Idoperator= (const Id &rhs)=delete
 Assignment operator - deleted. More...
 
Idoperator= (Id &&rhs) noexcept
 Move assignment operator. More...
 
virtual void Outlive ()
 Force the actual SDS ID to outlive the sds::Id variable. More...
 
template<typename T >
void Pointer (T **data, unsigned long *length=0) const
 Obtain a pointer to the data area of a primitive SDS item. More...
 
template<typename T >
void Put (const unsigned long length, const T *const data, const unsigned long offset=0)
 Put data into an SDS item. More...
 
template<typename T >
void Put (const std::string &name, T value)
 Insert a primitive value into a named component of the structure. More...
 
void Put (const std::string &name, const std::string &value)
 Insert a string value into a named component of the structure. More...
 
template<typename T >
void Put (T value)
 Insert a primitive value into the item. More...
 
void Put (const std::string &value)
 Insert a string value into the component. More...
 
virtual void PutExtra (const std::string &extra)
 Put extra data into an SDS item. More...
 
virtual void Rename (const std::string &name)
 Rename the SDS item. More...
 
template<class ContainerType >
void Resize (const ContainerType &dims)
 Change the dimensions of an SDS array. More...
 
virtual void SetDelete ()
 Indicate the underlying SDS structure should be deleted when the sds::Id object is destroyed. More...
 
virtual void SetFree ()
 Indicate the underlying SDS item should be free-ed when the sds::Id object is destroyed. More...
 
virtual void ShallowCopy (const Id &source)
 Shallow copy from a const sds::Id which will outlive this object. More...
 
virtual void ShallowCopy (Id *source, const bool outlives)
 Shallow copy from sds::Id. More...
 
virtual void ShallowCopy (const SdsIdType source, const bool free=false, const bool del=false, const bool readfree=false)
 Shallow copy from SdsIdType. More...
 
virtual unsigned long Size () const
 Return the size of an SDS structure, as required for exporting. More...
 
virtual unsigned long SizeDefined () const
 Return the size of an SDS structure, as required for exporting when fully defined. More...
 
virtual std::string toString (int maxlen=200)
 Convert the structure to a string. More...
 
virtual void ValidateCode (SdsCodeType requiredCode) const
 Validate the code of the SDS item. More...
 
virtual void Write (const std::string &filename) const
 Write the contents of the structure to a file. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from drama::sds::Id
template<typename ContainerType >
static Id CreateArgCmdStruct (const ContainerType &values, const std::string &name="ArgStructure")
 Factory constructor which creates a new "Arg" style SDS structure in the DRAMA Command style. More...
 
template<typename T >
static Id CreateArgCmdStructSingle (const T value, const std::string &name="ArgStructure")
 Factory constructor which creates a new "Arg" style SDS structure in the DRAMA Command style. More...
 
static Id CreateArgStruct (const std::string &name="ArgStructure")
 Factory constructor which creates a new "Arg" style SDS structure. More...
 
template<class ContainerType >
static Id CreateByAccess (ContainerType *container)
 Factory constructor method that accesses an exported SDS structure found in a byte stream. More...
 
template<class ContainerType >
static Id CreateByImport (const ContainerType &container)
 Factory constructor method that imports an exported SDS structure found in a byte stream. More...
 
static Id CreateFromSdsIdType (const SdsIdType item, const bool free=false, const bool del=false, const bool readfree=false)
 Factory constructor method that constructs an sds::Id item from an existing C language SDS id. More...
 
static Id CreateFromSdsIdTypeCopy (const SdsIdType item)
 Factory constructor method that constructs an sds::Id item by coping an existing C language SDS id. More...
 
static Id CreateNullItem ()
 Factory constructor method that constructs an null sds::Id item . More...
 
static Id CreateTopLevel (const std::string &name, const SdsCodeType code, const std::string &extra="")
 Constructor which creates a new (non-array) top-level item. More...
 
template<class ContainerType >
static Id CreateTopLevelArray (const std::string &name, const SdsCodeType code, const ContainerType &dims, const std::string &extra="")
 Factory constructor method Constructor which creates a new array top-level item. More...
 
static Id FromFile (const std::string &filename)
 Factory constructor method that reads an SDS structure from a file. More...
 
- Protected Member Functions inherited from drama::BulkData
void * RawDataAddr () const
 Returns the raw address of the data. More...
 
unsigned long SizeBytes () const
 Return the size of the data in bytes. More...
 

Constructor & Destructor Documentation

drama::BulkDataSds::BulkDataSds ( )
inline

Default constructor.

Items created this way are only suitable as a target for Move Assignment and Move Copy operations. Attempts to access the memory item will throw an exception.

drama::BulkDataSds::BulkDataSds ( std::weak_ptr< Task theTask,
const sds::Id SdsTemplate,
ShareType  type = ShareType::Create,
bool  Create = true,
bool  DeleteOnDestruct = true,
void *  Address = nullptr,
const std::string &  Name = "",
int  Key = 0 
)

Define a bulk data shared memory segment of the specified type for use with DRAMA 2 methods which can send bulk data, for transfer of an SDS structure.

The parameters for this routine are used quite differently in the different systems for which DRAMA is implemented, and these system dependent details are described in more detail below.

The bulk data segment is created, and the SDS item is exported into it.

Parameters
theTaskThe DRAMA Task we are part of. This is passed by pointer, but BulkDataSds is not taking ownership of the subject object, which must continue to exist until the BulkDataSds object is destroyed.
SdsTemplateTemplate Sds structure. The SDS structure placed in the shared memory shall be created using this SDS id and the ExportDefined() method. This allow you to create a large SDS array without defining it (and hence not requiring all the memory needed) as the template for the data in this structure.
typeThe type of the shared memory item.
CreateIf true, the memory section does not actually exist and this routine is to create it.
DeleteOnDestructIf set true, then the shared memory segment will be deleted when the BulkData item destructor is invoked.
AddressOn systems with global address spaces, eg. VxWorks, the address of the memory is enough to specify it completely - together with its size. In any case, if the section is already mapped, this argument must specify the address at which it is mapped. If the section is created by this routine, it will ignored.
NameUsed to identify the mapped section on some machines. On UNIX, for example, if mapped files are used, this is the file name in question. If Name is not actually used on the current system it should be passed as an empty string.
KeyOn some systems, this is an alternative way of specifying the mapped section. For example, if System V shared memory is used under UNIX, this is the identifier for that shared memory.

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

Click here for the DRAMA home page and here for the AAO home page.

For more information, contact tjf@aao.gov.au 

Generated on Mon Feb 22 2016 15:57:52 for AAO DRAMA/DRAMA2 C++ Interface by doxygen 1.8.10