104 lines
2.8 KiB
C++
104 lines
2.8 KiB
C++
/*!\file
|
||
* \brief \todo <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>.
|
||
*/
|
||
/*
|
||
* AppInfo.h
|
||
*
|
||
* Created on: 24 <20><><EFBFBD>. 2019 <20>.
|
||
* Author: titov
|
||
*/
|
||
|
||
#ifndef SOURCE_APPLICATION_SOFTWARE_APPINFO_H_
|
||
#define SOURCE_APPLICATION_SOFTWARE_APPINFO_H_
|
||
|
||
#include "AppId.hh"
|
||
|
||
#include <cstddef>
|
||
#include <iterator>
|
||
#include <utility>
|
||
|
||
namespace configuration { namespace software {
|
||
|
||
class AppInfo {
|
||
public:
|
||
static const CpuId incorret_cpu_id_by_default = 0xFFFFu;
|
||
static void reset( CpuId incorrect_cpu_id = incorret_cpu_id_by_default );
|
||
static bool 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 );
|
||
|
||
struct Initializers {
|
||
|
||
friend AppInfo;
|
||
|
||
struct InitializerInfo {
|
||
InitializerStepId initializer_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;
|
||
};
|
||
|
||
struct InitializerIterator : public std::iterator<
|
||
std::input_iterator_tag,
|
||
InitializerInfo, std::size_t> {
|
||
|
||
friend Initializers;
|
||
|
||
InitializerIterator & operator++();
|
||
InitializerIterator operator++(int);
|
||
bool operator==( InitializerIterator other ) const;
|
||
bool operator!=( InitializerIterator other ) const;
|
||
InitializerInfo operator*() const;
|
||
|
||
private:
|
||
InitializerIterator( CpuId cpu_id, std::size_t pos );
|
||
|
||
CpuId cpu_id;
|
||
std::size_t position;
|
||
};
|
||
|
||
InitializerIterator begin();
|
||
InitializerIterator end();
|
||
|
||
std::size_t getSize();
|
||
|
||
private:
|
||
Initializers( CpuId );
|
||
|
||
CpuId cpu_id;
|
||
};
|
||
|
||
static Initializers getInitializers( CpuId cpu_id );
|
||
|
||
|
||
struct Record {
|
||
InitializerStepId initializer_id;
|
||
CpuId cpu_id;
|
||
|
||
const char * links; uint32_t links_size;
|
||
const char * setting; uint32_t setting_size;
|
||
const char * proc; uint32_t proc_size;
|
||
|
||
Record( InitializerStepId, CpuId,
|
||
std::pair<const char *, std::size_t> links,
|
||
std::pair<const char *, std::size_t> setting,
|
||
std::pair<const char *, std::size_t> proc );
|
||
Record() : initializer_id(0), cpu_id(incorret_cpu_id_by_default) {}
|
||
};
|
||
|
||
static void initialize( Record * table, std::size_t quantity );
|
||
private:
|
||
static std::size_t search_from( std::size_t i, CpuId cpu_id );
|
||
|
||
static Record * table;
|
||
static std::size_t size;
|
||
static std::size_t num_records;
|
||
};
|
||
|
||
}}
|
||
|
||
|
||
|
||
#endif /* SOURCE_APPLICATION_SOFTWARE_APPINFO_H_ */
|