RTC Toolkit 6.0.0-pre2
Loading...
Searching...
No Matches
rtctk::componentFramework::RepositoryIf Class Referenceabstract

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

#include <rtctk/componentFramework/repositoryIf.hpp>

Inheritance diagram for rtctk::componentFramework::RepositoryIf:
rtctk::componentFramework::PersistentRepoIf rtctk::componentFramework::RepositorySubscriberIf rtctk::componentFramework::test::FakeRepository rtctk::componentFramework::PersistentRepoAdapter rtctk::componentFramework::test::FakePersistentRepoIf rtctk::componentFramework::test::MockPersistentRepoIf rtctk::componentFramework::OldbIf rtctk::componentFramework::RuntimeRepoIf rtctk::componentFramework::test::FakeRepositorySubscriber rtctk::componentFramework::test::FakePersistentRepoIf rtctk::componentFramework::test::FakeRepositorySubscriber rtctk::componentFramework::test::MockRepository

Classes

class  AccessOutOfBounds
 
class  BatchRequest
 An object representing one or more asynchronous I/O requests to a repository. More...
 
class  BatchResponse
 
class  BufferTooSmall
 
class  DataPointAlreadyExists
 
class  DataPointDoesNotExist
 
class  DataPointPathNotAbsolute
 
class  IncompatibleType
 
class  MetaData
 Class for passing/receiving metadata to/from the repository. More...
 
class  MultipleRequestsFailed
 
class  OperationNotAllowed
 
class  ServiceFailure
 
class  UnsupportedType
 

Public Types

using PathList = std::vector<DataPointPath>
 
using Clock = taiclock::TaiClock
 
using Timestamp = Clock::time_point
 
using CallbackType = std::function<void(const DataPointPath&)>
 Signature of the callback functions that can be registered with the repository requests.
 

Public Member Functions

 RepositoryIf ()=default
 
virtual ~RepositoryIf ()=default
 
BatchResponse SendRequest (const BatchRequest &request)
 
BatchResponse SendRequest (const BatchRequest &request) const
 
template<typename T>
void CreateDataPoint (const DataPointPath &path)
 Creates a new empty datapoint in the repository.
 
template<typename T>
void CreateDataPoint (const DataPointPath &path, const T &initial_value)
 Creates a new datapoint in the repository with an initial value.
 
void CreateDataPoint (const DataPointPath &path, const char *initial_value)
 
void DeleteDataPoint (const DataPointPath &path, bool recurse=false)
 Deletes a datapoint.
 
const std::type_info & GetDataPointType (const DataPointPath &path) const
 Fetches the type of the datapoint.
 
size_t GetDataPointSize (const DataPointPath &path) const
 Fetches the size of the datapoint's data.
 
RtcVectorUInt64 GetDataPointShape (const DataPointPath &path) const
 Fetches the shape of the datapoint's data.
 
bool DataPointExists (const DataPointPath &path) const
 Checks for the existence of a datapoint in the repository.
 
std::pair< PathList, PathListGetChildren (const DataPointPath &path, bool recurse=false) const
 Queries the child datapoints and paths for a given parent path.
 
template<typename T>
GetDataPoint (const DataPointPath &path) const
 Fetches a datapoint from the repository.
 
template<typename T>
std::optional< T > TryGetDataPoint (const DataPointPath &path) const
 Fetches a datapoint from the repository.
 
template<typename T>
void SetDataPoint (const DataPointPath &path, const T &value)
 Sets a datapoint in the repository.
 
void SetDataPoint (const DataPointPath &path, const char *value)
 
template<typename T>
void ReadDataPoint (const DataPointPath &path, T &buffer) const
 Reads a datapoint from the repository.
 
template<typename T>
void WriteDataPoint (const DataPointPath &path, const T &buffer)
 Writes a datapoint to the repository.
 
void WriteDataPoint (const DataPointPath &path, const char *buffer)
 
template<typename... T>
void WriteDataPoints (const T &... args)
 
template<typename... T>
void ReadDataPoints (T &... args) const
 

Static Public Member Functions

static const std::type_info & StringToType (const std::string &arg)
 Converts an RTC datapoint type string to a type_info.
 
static std::string TypeToString (const std::type_info &arg)
 Converts a type_info to an RTC datapoint type string.
 
static std::any MakeAnyBuffer (const MetaData &metadata)
 Helper method to create an std::any buffer compatible with a specific datapoint.
 

Protected Types

using RequestList = std::vector<std::any>
 

Protected Member Functions

virtual BatchResponse ProcessRequests (const RequestList &requests)=0
 

Detailed Description

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

Note
All adapter implementations of this interface must ensure thread safety of this API.
Thread Safety
thread-safe

Member Typedef Documentation

◆ CallbackType

Signature of the callback functions that can be registered with the repository requests.

◆ Clock

◆ PathList

◆ RequestList

using rtctk::componentFramework::RepositoryIf::RequestList = std::vector<std::any>
protected

◆ Timestamp

Constructor & Destructor Documentation

◆ RepositoryIf()

rtctk::componentFramework::RepositoryIf::RepositoryIf ( )
default

◆ ~RepositoryIf()

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

Member Function Documentation

◆ CreateDataPoint() [1/3]

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

Creates a new empty datapoint in the repository.

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

Template Parameters
TThe type of the datapoint to create. See RepositoryIf::CreateDataPoint for a list of supported types.
Parameters
[in]pathThe datapoint path that should be created.
Thread Safety
thread-safe
Exception Safety
basic

◆ CreateDataPoint() [2/3]

void rtctk::componentFramework::RepositoryIf::CreateDataPoint ( const DataPointPath & path,
const char * initial_value )

◆ CreateDataPoint() [3/3]

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

Creates a new datapoint in the repository with an initial value.

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

Template Parameters
TThe type of the datapoint to create. See RepositoryIf::CreateDataPoint for a list of supported types.
Parameters
[in]pathThe datapoint path that should be created.
[in]initial_valueThe initial value that should be set for the new datapoint.
Thread Safety
thread-safe
Exception Safety
basic

◆ DataPointExists()

bool rtctk::componentFramework::RepositoryIf::DataPointExists ( const DataPointPath & path) const

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

◆ DeleteDataPoint()

void rtctk::componentFramework::RepositoryIf::DeleteDataPoint ( const DataPointPath & path,
bool recurse = false )

Deletes a datapoint.

Parameters
[in]pathThe path of the datapoint to delete in the repository.
[in]recurseOptional flag indicating if datapoints should be deleted recursively.
Thread Safety
thread-safe
Exception Safety
basic

◆ GetChildren()

std::pair< RepositoryIf::PathList, RepositoryIf::PathList > rtctk::componentFramework::RepositoryIf::GetChildren ( const DataPointPath & path,
bool recurse = false ) const

Queries the child datapoints and paths for a given parent path.

This method will synchronously query all the available datapoints that are leaf nodes immediately below the given path and also the non-leaf child paths, i.e. sub-folders when interpreting the repository as a hierarchical folder like structure.

The set of datapoint and child paths is returned as two separate lists. If recurse is false then only the immediate children are returned. Otherwise all datapoint and child sub-folder paths are returned recursively.

Note
The contests of the returned path lists are not necessarily ordered, i.e. no assumption should be made on the ordering.
Parameters
[in]pathThe path in which to search for datapoints and child paths.
[in]recurseOptional flag indicating if paths should be queried recursively.
Returns
A std::pair of path lists, 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.
Exceptions
PathNotFoundIf the path does not exist in the repository.
ServiceFailureWhen the underlying back-end system indicates an unexpected failure.
Thread Safety
thread-safe
Exception Safety
strong

◆ 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

◆ GetDataPointShape()

RtcVectorUInt64 rtctk::componentFramework::RepositoryIf::GetDataPointShape ( const DataPointPath & path) const

Fetches the shape 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 an empty vector.
Strings
Will return a vector with size 1, where result[0] is the length of the string, i.e. the number of characters in the string.
Vectors
Will return a vector with size 1, where result[0] is the number of elements in the vector.
Matrices
Will return a vector with size 2, where result[0] is the number of rows and result[1] is the number of columns.
Parameters
[in]pathThe datapoint path for which to fetch the shape.
Returns
A vector describing the shape of the datapoint's data.
Thread Safety
thread-safe
Exception Safety
strong

◆ GetDataPointSize()

size_t rtctk::componentFramework::RepositoryIf::GetDataPointSize ( const DataPointPath & path) const

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.
Parameters
[in]pathThe datapoint path for which to fetch the size.
Returns
The number of elements in the datapoint's data.
Thread Safety
thread-safe
Exception Safety
strong

◆ GetDataPointType()

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

Fetches the type of the datapoint.

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

Parameters
[in]pathThe datapoint path for which to fetch the type.
Returns
The type_info object corresponding to the type of the datapoint.
Thread Safety
thread-safe
Exception Safety
strong

◆ MakeAnyBuffer()

std::any rtctk::componentFramework::RepositoryIf::MakeAnyBuffer ( const MetaData & metadata)
static

Helper method to create an std::any buffer compatible with a specific datapoint.

This is used to prepare buffers for the BatchRequest::ReadDataPoint and BatchRequest::PartialReadDataPoint methods.

Parameters
[in]metadataThe metadata fetched for a specific datapoint.
Returns
An std::any object usable by the BatchRequest read methods.

◆ ProcessRequests()

◆ 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

◆ ReadDataPoints()

template<typename... T>
void rtctk::componentFramework::RepositoryIf::ReadDataPoints ( T &... args) const

◆ SendRequest() [1/2]

RepositoryIf::BatchResponse rtctk::componentFramework::RepositoryIf::SendRequest ( const BatchRequest & request)

◆ SendRequest() [2/2]

RepositoryIf::BatchResponse rtctk::componentFramework::RepositoryIf::SendRequest ( const BatchRequest & request) const

◆ SetDataPoint() [1/2]

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

◆ StringToType()

const std::type_info & rtctk::componentFramework::RepositoryIf::StringToType ( const std::string & arg)
static

Converts an RTC datapoint type string to a type_info.

Parameters
[in]argThe RTC datapoint type name string, e.g. RtcString.
Returns
type_info of the resolved type.
Exceptions
UnsupportedTypeIf the type was not found.

◆ TryGetDataPoint()

template<typename T>
std::optional< T > rtctk::componentFramework::RepositoryIf::TryGetDataPoint ( const DataPointPath & path) const

Fetches a datapoint from the repository.

If the datapoint exists, it 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 or std::nullopt if the datapoint does not exist.
Thread Safety
thread-safe
Exception Safety
basic

◆ TypeToString()

std::string rtctk::componentFramework::RepositoryIf::TypeToString ( const std::type_info & arg)
static

Converts a type_info to an RTC datapoint type string.

Parameters
[in]argThe type_info to be resolved.
Returns
RTC type name string, e.g. RtcString.
Exceptions
UnsupportedTypeIf the type was not found.

◆ 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

◆ WriteDataPoints()

template<typename... T>
void rtctk::componentFramework::RepositoryIf::WriteDataPoints ( const T &... args)

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