/* * PrivateParametrsProviderInitializer.cpp * * Created on: 30 авг. 2021 г. * Author: sozonov */ #include "PrivateParamProvider.hh" #include "../../systemic/MemberFuntion.hpp" #include "../../systemic/CustomParameters.hpp" #include "../../systemic/TransferSettingToIParameterProvider.hh" #include 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( 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 param_provider_data = provider_interface->getParameterBuff(setting.parameter_id).get(); std::pair 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( 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 TransferAction; TransferAction * transfer_action = memories::instance_object( env.static_setup_ma, *transfer_sett ); env.rholder.share( *transfer_action, links.transfer ); } } }