RTC Toolkit  1.0.0
Classes | Public Types | Public Member Functions | List of all members
rtctk::componentFramework::RepositoryIf Class Referenceabstract

Abstract interface providing basic read and write facilities to a repository. More...

#include <repositoryIf.hpp>

Inheritance diagram for rtctk::componentFramework::RepositoryIf:
rtctk::componentFramework::FileRepository rtctk::componentFramework::OldbIf rtctk::componentFramework::PersistentRepoIf rtctk::componentFramework::RuntimeRepoIf rtctk::componentFramework::FileOldbAdapter rtctk::componentFramework::FilePersistentRepoAdapter rtctk::componentFramework::FileRuntimeRepoAdapter rtctk::componentFramework::FileOldbAdapter rtctk::componentFramework::OldbAdapter rtctk::componentFramework::FilePersistentRepoAdapter rtctk::componentFramework::PersistentRepoAdapter rtctk::componentFramework::FileRuntimeRepoAdapter rtctk::componentFramework::RuntimeRepoAdapter

Classes

class  Request
 A request object to pass information about datapoints that should be read (written) from (to) the repository. More...
 
class  Response
 An object used to wait for a request to complete. More...
 

Public Types

using StringList = std::vector< std::string >
 

Public Member Functions

virtual ~RepositoryIf ()
 
virtual void CreateDataPoint (const DataPointPath &path, const std::type_info &type)=0
 Creates a new datapoint in the repository with a specified type. More...
 
template<typename T >
void CreateDataPoint (const DataPointPath &path)
 Creates a new datapoint in the repository. More...
 
template<typename T >
void CreateDataPoint (const DataPointPath &path, const T default_value)
 Creates a new datapoint in the repository and sets a default value. More...
 
virtual void DeleteDataPoint (const DataPointPath &path)=0
 Deletes a datapoint. More...
 
virtual const std::type_info & GetDataPointType (const DataPointPath &path) const =0
 Fetches the type of the datapoint. More...
 
virtual size_t GetDataPointSize (const DataPointPath &path) const =0
 Fetches the size of the datapoint's data. More...
 
virtual bool DataPointExists (const DataPointPath &path) const =0
 Checks for the existence of a datapoint in the repository. More...
 
virtual std::pair< StringList, StringListGetChildren (const DataPointPath &path) const =0
 Queries the datapoints and child paths for a given path. More...
 
template<typename T >
GetDataPoint (const DataPointPath &path) const
 Fetches a datapoint from the repository. More...
 
template<typename T >
void SetDataPoint (const DataPointPath &path, const T value)
 Sets a datapoint in the repository. More...
 
template<typename T >
void ReadDataPoint (const DataPointPath &path, T &buffer) const
 Reads a datapoint from the repository. More...
 
template<typename T >
void WriteDataPoint (const DataPointPath &path, const T &buffer)
 Writes a datapoint to the repository. More...
 
void WriteDataPoint (const DataPointPath &path, const char *buffer)
 
virtual Response SendReadRequest (const Request &request) const =0
 Sends a request to read data from the repository. More...
 
virtual Response SendWriteRequest (const Request &request)=0
 Sends a request to write data to the repository. More...
 
template<>
void CreateDataPoint (const DataPointPath &path, const char *default_value)
 
template<>
void SetDataPoint (const DataPointPath &path, const char *value)
 

Detailed Description

Abstract interface providing basic read and write facilities to a repository.

Thread Safety
thread-safe

Member Typedef Documentation

◆ StringList

using rtctk::componentFramework::RepositoryIf::StringList = std::vector<std::string>

Constructor & Destructor Documentation

◆ ~RepositoryIf()

rtctk::componentFramework::RepositoryIf::~RepositoryIf ( )
virtual

Member Function Documentation

◆ CreateDataPoint() [1/4]

template<typename T >
void rtctk::componentFramework::RepositoryIf::CreateDataPoint ( const DataPointPath path)

Creates a new datapoint in the repository.

The type of the datapoint is derived from the template argument type.

Parameters
[in]pathThe datapoint path that should be created.
Thread Safety
thread-safe
Exception Safety
basic

◆ CreateDataPoint() [2/4]

template<>
void rtctk::componentFramework::RepositoryIf::CreateDataPoint ( const DataPointPath path,
const char *  default_value 
)

◆ CreateDataPoint() [3/4]

virtual void rtctk::componentFramework::RepositoryIf::CreateDataPoint ( const DataPointPath path,
const std::type_info &  type 
)
pure virtual

Creates a new datapoint in the repository with a specified type.

Parameters
[in]pathThe datapoint path that should be created.
[in]typeA type identifier object returned by typeid indicating the type of the new datapoint. Supported values are indicated below.

The following are the supported values for the type argument:

  • typeid(bool)
  • typeid(int32_t)
  • typeid(int64_t)
  • typeid(float)
  • typeid(double)
  • typeid(std::string)
  • typeid(std::vector<bool>)
  • typeid(std::vector<int32_t>)
  • typeid(std::vector<int64_t>)
  • typeid(std::vector<float>)
  • typeid(std::vector<double>)
  • typeid(std::vector<std::string>)
  • typeid(MatrixBuffer<bool>)
  • typeid(MatrixBuffer<int32_t>)
  • typeid(MatrixBuffer<int64_t>)
  • typeid(MatrixBuffer<float>)
  • typeid(MatrixBuffer<double>)
  • typeid(MatrixBuffer<std::string>)
Thread Safety
thread-safe
Exception Safety
basic

Implemented in rtctk::componentFramework::PersistentRepoAdapter, rtctk::componentFramework::OldbAdapter, and rtctk::componentFramework::FileRepository.

◆ CreateDataPoint() [4/4]

template<typename T >
void rtctk::componentFramework::RepositoryIf::CreateDataPoint ( const DataPointPath path,
const T  default_value 
)

Creates a new datapoint in the repository and sets a default value.

The type of the datapoint is derived from the template argument type.

Parameters
[in]pathThe datapoint path that should be created.
[in]default_valueThe default value that should be set for the new datapoint.
Thread Safety
thread-safe
Exception Safety
basic

◆ DataPointExists()

virtual bool rtctk::componentFramework::RepositoryIf::DataPointExists ( const DataPointPath path) const
pure virtual

Checks for the existence of a datapoint in the repository.

Parameters
[in]pathThe datapoint path to check.
Returns
true if the datapoint path exists in the repository and false otherwise.
Thread Safety
thread-safe
Exception Safety
strong

Implemented in rtctk::componentFramework::PersistentRepoAdapter, rtctk::componentFramework::OldbAdapter, and rtctk::componentFramework::FileRepository.

◆ DeleteDataPoint()

virtual void rtctk::componentFramework::RepositoryIf::DeleteDataPoint ( const DataPointPath path)
pure virtual

Deletes a datapoint.

Parameters
[in]pathThe path of the datapoint to delete in the repository.
Thread Safety
thread-safe
Exception Safety
basic

Implemented in rtctk::componentFramework::PersistentRepoAdapter, rtctk::componentFramework::OldbAdapter, and rtctk::componentFramework::FileRepository.

◆ GetChildren()

virtual std::pair<StringList, StringList> rtctk::componentFramework::RepositoryIf::GetChildren ( const DataPointPath path) const
pure virtual

Queries the datapoints and child paths for a given path.

This method will query all the available datapoints that are leaf nodes immediately below the given path and also the child paths, i.e. sub-folders when interpreting the repository as a hierarchical folder like structure. The set of immediate datapoint and child paths is returned as two separate lists.

If an error occurs when querying the the repository a rtctk::componentFramework::RtctkException is thrown.

Parameters
[in]pathThe path in which to search for datapoints and child paths.
Returns
A std::pair of string lists, i.e. std::vector<std::string>, with the first list in the pair containing the datapoints found and the second list containing the child paths found. If no datapoints are found then the list for datapoints is empty. Similarly if not child paths are found then the child path list is empty.
Thread Safety
thread-safe
Exception Safety
strong

Implemented in rtctk::componentFramework::PersistentRepoAdapter, rtctk::componentFramework::OldbAdapter, and rtctk::componentFramework::FileRepository.

◆ GetDataPoint()

template<typename T >
T rtctk::componentFramework::RepositoryIf::GetDataPoint ( const DataPointPath path) const

Fetches a datapoint from the repository.

The datapoint is read from the repository and returned. If an error occurs then a rtctk::componentFramework::RtctkException is thrown.

Note
This method blocks while waiting for the read request from the repository to complete.
Parameters
[in]pathThe path of the datapoint that should be fetched from the repository.
Returns
The datapoint's value.
Thread Safety
thread-safe
Exception Safety
basic

◆ GetDataPointSize()

virtual size_t rtctk::componentFramework::RepositoryIf::GetDataPointSize ( const DataPointPath path) const
pure virtual

Fetches the size of the datapoint's data.

This method will return one of the following values depending on the category of the datapoint's type:

Scalars
Will always return 1 for scalars such as RtcBool, RtcInt32, RtcInt64, RtcFloat, and RtcDouble.
Strings
Will return the length of the string, i.e. the number of characters in the string.
Vectors
Will return the number of elements in the vector.
Matrices
Will return the total number of elements in the matrix, i.e. the number of rows times the number of columns.
Returns
The number of elements in the datapoint's data.
Thread Safety
thread-safe
Exception Safety
strong

Implemented in rtctk::componentFramework::PersistentRepoAdapter, rtctk::componentFramework::OldbAdapter, and rtctk::componentFramework::FileRepository.

◆ GetDataPointType()

virtual const std::type_info& rtctk::componentFramework::RepositoryIf::GetDataPointType ( const DataPointPath path) const
pure virtual

Fetches the type of the datapoint.

This will return the type used when the datapoint was created with the CreateDataPoint method.

Returns
The type_info object corresponding to the type of the datapoint.
Thread Safety
thread-safe
Exception Safety
strong

Implemented in rtctk::componentFramework::PersistentRepoAdapter, rtctk::componentFramework::OldbAdapter, and rtctk::componentFramework::FileRepository.

◆ ReadDataPoint()

template<typename T >
void rtctk::componentFramework::RepositoryIf::ReadDataPoint ( const DataPointPath path,
T &  buffer 
) const

Reads a datapoint from the repository.

Fetches the data for a datapoint from the repository and updates a local buffer in-place. If an error occurs then a rtctk::componentFramework::RtctkException is thrown.

Note
This method blocks while waiting for the data to be received from the repository.
Parameters
[in]pathThe path of the datapoint that should be fetched from the repository.
[in]bufferA reference to the local buffer that should be filled with the received data.
Thread Safety
thread-safe
Exception Safety
basic

◆ SendReadRequest()

virtual Response rtctk::componentFramework::RepositoryIf::SendReadRequest ( const Request request) const
pure virtual

Sends a request to read data from the repository.

This method allows non-blocking and asynchronous reading of datapoints form the repository. The method returns immediately, allowing other work to be done in the calling thread while the read request is completed in the background. If any callback handlers were registered in request, they will be called as soon as the data is available for the respective datapoint.

Note
The buffers for the datapoints added to request must not be accessed until the Wait method of the response object returns successfully, i.e. without a timeout.

If an error occurs then a rtctk::componentFramework::RtctkException is thrown.

Note
This method is not transactional or fully atomic. If an error occurs while reading the datapoints, some or all of the datapoint buffers registered with the read request may be left unmodified. It is however guaranteed that any particular datapoint buffer is either updated completely or not modified at all.
Parameters
[in]requestThe request object that contains all the datapoints to read.
Returns
A response object that must be used to synchronise with the completion of the read request.

Implemented in rtctk::componentFramework::PersistentRepoAdapter, rtctk::componentFramework::OldbAdapter, and rtctk::componentFramework::FileRepository.

◆ SendWriteRequest()

virtual Response rtctk::componentFramework::RepositoryIf::SendWriteRequest ( const Request request)
pure virtual

Sends a request to write data to the repository.

This method allows non-blocking writing of datapoints to the repository. The method returns immediately, allowing other work to be done in the calling thread while the write request is completed in the background. If any callback handlers were registered in request, they will be called as soon as the respective datapoint's data has been sent and the buffer will no longer be accessed by the API, i.e. the caller can modify or release the buffer from that point on.

Note
The buffers for the datapoints added to request must not be modified or released until the Wait method of the response object returns successfully, i.e. without a timeout.

If an error occurs then a rtctk::componentFramework::RtctkException is thrown.

Note
This method is not transactional or fully atomic. If an error occurs while writing the datapoints, only some of the datapoints registered with the write request may be actually updated in the repository. It is however guaranteed that any particular datapoint is either updated completely in the repository or not at all.
Parameters
[in]requestThe request object that contains all the datapoints to write.
Returns
A response object that must be used to synchronise with the completion of the write request.

Implemented in rtctk::componentFramework::PersistentRepoAdapter, rtctk::componentFramework::OldbAdapter, and rtctk::componentFramework::FileRepository.

◆ SetDataPoint() [1/2]

template<>
void rtctk::componentFramework::RepositoryIf::SetDataPoint ( const DataPointPath path,
const char *  value 
)

◆ SetDataPoint() [2/2]

template<typename T >
void rtctk::componentFramework::RepositoryIf::SetDataPoint ( const DataPointPath path,
const T  value 
)

Sets a datapoint in the repository.

A new value for the datapoint is sent to the repository and updated. If an error occurs then a rtctk::componentFramework::RtctkException is thrown.

Note
This method blocks while waiting for the data to be sent to the repository.
Parameters
[in]pathThe path of the datapoint that should be updated in the repository.
[in]valueThe new data for the datapoint.
Thread Safety
thread-safe
Exception Safety
basic

◆ WriteDataPoint() [1/2]

void rtctk::componentFramework::RepositoryIf::WriteDataPoint ( const DataPointPath path,
const char *  buffer 
)

◆ WriteDataPoint() [2/2]

template<typename T >
void rtctk::componentFramework::RepositoryIf::WriteDataPoint ( const DataPointPath path,
const T &  buffer 
)

Writes a datapoint to the repository.

Data is read from the buffer reference provided and sent to the repository to update the datapoint. If an error occurs then a rtctk::componentFramework::RtctkException is thrown.

This method is preferred over SetDataPoint for large vectors and matrices, since passing a reference to the buffer is more efficient.

Note
This method blocks while waiting for the data to be sent to the repository.
Parameters
[in]pathThe path of the datapoint that should be updated in the repository.
[in]bufferA reference to the new data for the datapoint.
Thread Safety
thread-safe
Exception Safety
basic

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