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