MotorControlModuleSDFM_TMS3.../Projects/EFC_Application/UMLibrary/application/basic/PrivateParametrsProviderInitializer.cpp

66 lines
2.4 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 );
}
}
}