66 lines
2.5 KiB
C++
66 lines
2.5 KiB
C++
/*
|
||
* PrivateParametrsProviderInitializer.cpp
|
||
*
|
||
* Created on: 30 авг. 2021 г.
|
||
* Author: sozonov
|
||
*/
|
||
#include "PrivateParamProvider.hh"
|
||
#include "../../systemic/MemberFuntion.hpp"
|
||
|
||
#include "../../systemic/CustomParameters.hpp"
|
||
#include "../../systemic/TransferSettingToIParameterProvider.hh"
|
||
|
||
#include <cstring>
|
||
|
||
application::basic::PrivateParamProvider::PrivateParamProvider( const Links & links , const Setting & setting) :
|
||
links(links), setting(setting) {}
|
||
|
||
bool application::basic::PrivateParamProvider::input( Environment & env ) {
|
||
|
||
return ( provider = env.rholder.getShared<systemic::IParameterProvider>( links.param_provider ) )
|
||
and systemic::getStringView( platform_string,
|
||
env.cparams,
|
||
const_prov,
|
||
links.params )
|
||
and platform_string.try_lock();
|
||
|
||
}
|
||
|
||
bool application::basic::PrivateParamProvider::prepare() {
|
||
|
||
return provider_interface = provider->grab();
|
||
|
||
}
|
||
|
||
void application::basic::PrivateParamProvider::build( Environment & env ) {
|
||
|
||
if(links.params) {
|
||
//берем данные из поставщика настраиваемых данных и передаем их в строковом представлении, для записи в настройки
|
||
std::pair<char *, std::size_t> param_provider_data = provider_interface->getParameterBuff(setting.parameter_id).get();
|
||
std::pair<char *, std::size_t> setting_data = platform_string.get();
|
||
|
||
if(setting_data.second == param_provider_data.second)
|
||
std::memcpy( setting_data.first, param_provider_data.first, param_provider_data.second);
|
||
|
||
typedef systemic::TransferSettingToIParameterProvider TransferSetting;
|
||
|
||
TransferSetting * transfer_sett = memories::instance_object<TransferSetting>( env.static_data_ma,
|
||
*provider, setting.parameter_id,
|
||
platform_string, links.params );
|
||
|
||
platform_string.unlock();
|
||
provider->release(provider_interface);
|
||
|
||
|
||
if(links.transfer) {
|
||
typedef systemic::detail::MemberFuntion<TransferSetting,void, &TransferSetting::transfer_setting> TransferAction;
|
||
TransferAction * transfer_action = memories::instance_object<TransferAction>( env.static_setup_ma, *transfer_sett );
|
||
|
||
env.rholder.share<Action>( *transfer_action, links.transfer );
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
|