139 lines
3.9 KiB
C++
139 lines
3.9 KiB
C++
/*!\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;
|
|
|
|
}
|