/*!\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 links, std::pair setting, std::pair 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 links, std::pair setting, std::pair 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; }