87 lines
2.4 KiB
C++
87 lines
2.4 KiB
C++
/*
|
|
* CustomParameters.cpp
|
|
*
|
|
* Created on: 20 ìàÿ 2019 ã.
|
|
* Author: titov
|
|
*/
|
|
|
|
#include "CustomParameters.hpp"
|
|
|
|
|
|
systemic::CustomParameters::CustomParameters(
|
|
IParameterProvider * * providers, std::size_t size) :
|
|
providers(providers), size(size) {}
|
|
|
|
bool systemic::CustomParameters::addProvider( IParameterProvider * provider,
|
|
ProviderId provider_id ) {
|
|
|
|
bool result = false;
|
|
|
|
if( provider_id < size and not providers[provider_id] )
|
|
result = ( providers[provider_id] = provider );
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
bool systemic::CustomParameters::flushString(
|
|
ProviderId provider_id, Id parameter_id,
|
|
std::pair<const peripheral::protected_char *, std::size_t> string ) {
|
|
|
|
bool result = false;
|
|
|
|
if( provider_id < size and providers[provider_id] ) {
|
|
if( providers[provider_id]->getParameterBuff(parameter_id).get().first == string.first )
|
|
result = providers[provider_id]->flushParameterBuff(parameter_id);
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
systemic::SharedData systemic::CustomParameters::getString( ProviderId provider_id, Id parameter_id) const {
|
|
|
|
systemic::SharedData result;
|
|
|
|
if( provider_id < size and providers[provider_id] )
|
|
result = providers[provider_id]->getParameterBuff(parameter_id);
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
systemic::SharedData systemic::CustomParameters::createString( ProviderId provider_id, Id parameter_id, std::size_t size ) {
|
|
|
|
systemic::SharedData result;
|
|
|
|
if( provider_id < CustomParameters::size and providers[provider_id] ){
|
|
result = providers[provider_id]->createParameterBuff(parameter_id, size);
|
|
}
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
bool systemic::getStringView( SharedData & string,
|
|
const CustomParameters & cparams,
|
|
CustomParameters::ProviderId provider_id,
|
|
CustomParameters::Id id ) {
|
|
|
|
if( not string.get().first )
|
|
string = cparams.getString( provider_id, id );
|
|
|
|
return string.get().first;
|
|
|
|
}
|
|
|
|
bool systemic::createStringView( SharedData & string,
|
|
CustomParameters & cparams,
|
|
CustomParameters::ProviderId provider_id,
|
|
std::size_t size,
|
|
CustomParameters::Id id ) {
|
|
if( not string.get().first )
|
|
string = cparams.createString( provider_id, id, size );
|
|
|
|
return string.get().first;
|
|
|
|
}
|