MotorControlModuleSDFM_TMS3.../Projects/EFC_Communication/UMLibrary/configuration/software/AppInfo.cpp
2024-06-07 11:12:56 +03:00

139 lines
4.0 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*!\file
* \brief \todo Описание файла.
*/
/*
* AppInfo.cpp
*
* Created on: 24 июн. 2019 г.
* Author: titov
*/
#include "AppInfo.hh"
using configuration::software::AppInfo;
std::size_t AppInfo::num_records = 0;
configuration::software::AppInfo::Record * configuration::software::AppInfo::table = nullptr;
std::size_t configuration::software::AppInfo::size = 0;
bool AppInfo::notice( InitializerStepId initializer_id, CpuId cpu_id,
std::pair<const char *, std::size_t> links,
std::pair<const char *, std::size_t> setting,
std::pair<const char *, std::size_t> proc ) {
bool result;
if( result = num_records < size )
table[num_records++] = Record( initializer_id, cpu_id, links, setting, proc );
return result;
}
AppInfo::Initializers::InitializerIterator::InitializerIterator(
CpuId cpu_id, std::size_t pos ) : position(pos), cpu_id(cpu_id) {}
AppInfo::Initializers::InitializerIterator & AppInfo::Initializers::InitializerIterator::operator++() {
position = search_from( position + 1, cpu_id );
return *this;
}
AppInfo::Initializers::InitializerIterator AppInfo::Initializers::InitializerIterator::operator++(int) {
AppInfo::Initializers::InitializerIterator temp = *this;
++(*this);
return temp;
}
bool AppInfo::Initializers::InitializerIterator::operator==(
InitializerIterator other ) const {
return position == other.position;
}
bool AppInfo::Initializers::InitializerIterator::operator!=(
InitializerIterator other ) const {
return position != other.position;
}
AppInfo::Initializers::InitializerInfo AppInfo::Initializers::InitializerIterator::operator*() const {
return { table[position].initializer_id,
std::make_pair( table[position].links, table[position].links_size ),
std::make_pair( table[position].setting, table[position].setting_size ),
std::make_pair( table[position].proc, table[position].proc_size )};
}
std::size_t AppInfo::search_from( std::size_t i, CpuId cpu_id ) {
if( i != size ) while ( not( table[i].cpu_id == cpu_id )
and ++i < size );
return i;
}
AppInfo::Initializers::InitializerIterator AppInfo::Initializers::begin() {
return AppInfo::Initializers::InitializerIterator( cpu_id, search_from( 0, cpu_id ) );
}
AppInfo::Initializers::InitializerIterator AppInfo::Initializers::end() {
return AppInfo::Initializers::InitializerIterator( cpu_id, size );
}
AppInfo::Initializers AppInfo::getInitializers( CpuId cpu_id ) {
return AppInfo::Initializers( cpu_id );
}
AppInfo::Record::Record( InitializerStepId initializer_id, CpuId cpu_id,
std::pair<const char *, std::size_t> links,
std::pair<const char *, std::size_t> setting,
std::pair<const char *, std::size_t> proc ) :
initializer_id(initializer_id),
cpu_id(cpu_id),
links( links.first ), links_size( links.second ),
setting( setting.first ), setting_size( setting.second ),
proc( proc.first), proc_size( proc.second ){}
AppInfo::Initializers::Initializers(CpuId cpu_id) :
cpu_id(cpu_id) {}
void AppInfo::reset( CpuId incorrect_cpu_id ) {
for( unsigned i = 0; i < size; i++ )
table[i].cpu_id = incorrect_cpu_id;
}
std::size_t AppInfo::Initializers::getSize() {
std::size_t num_app = 0;
for( unsigned i = 0; i < size; i++ )
if( table[i].cpu_id == cpu_id )
num_app++;
return num_app;
}
void configuration::software::AppInfo::initialize( Record * p_table,
std::size_t quantity) {
table = p_table;
size = quantity;
}