12#include "crabmeat-common.h"
13#include "time/cbm_time.h"
14#include "comm/cbm_comm.h"
16#include "kernel/kobject.h"
17#include "kernel/ksetup.h"
18#include "kernel/kstats.h"
20#include "cfgfile/cbm_cfgfile.h"
38#define RL_LoopStart RL_READ
43#define RL_LoopEnd RL_WRITE
66 RunLevelArgs( RunLevel _rl=RL_NONE)
68 cfg( NULL), clk( NULL),
69 kcfg( NULL), ptr( NULL),
70 sse( -1), nextcall_sse( -1),
71 rl( _rl), nextcall_rl( RL_NONE)
73 this->dT.q = this->nextcall_dT.q = -1;
74 this->dT.unit = this->nextcall_dT.unit =
'-';
76 this->flags.terminate = 0;
79 this->flags.error = 0;
85 cbm::io_kcomm_t * iokcomm;
86 cbm::config_file_t
const * cfg;
87 cbm::sclock_t
const * clk;
93 cbm::dT_t dT, nextcall_dT;
94 cbm::td_scalar_t sse, nextcall_sse;
95 RunLevel rl, nextcall_rl;
97 cbm::RunLevelFlags flags;
101struct CBM_API CBM_KernelTask
103 virtual ~CBM_KernelTask() = 0;
104 virtual RunLevel runlevel()
const = 0;
105 virtual lerr_t execute( kernel_t *, RunLevelArgs *) = 0;
107template < RunLevel _RunLevel >
108struct CBM_KernelRunLevelTask : CBM_KernelTask
110 RunLevel runlevel()
const
111 {
return _RunLevel; }
113struct CBM_API CBM_KernelTaskConfigure : CBM_KernelRunLevelTask<RL_CONFIGURE>
115 lerr_t execute( kernel_t *, RunLevelArgs *);
117struct CBM_API CBM_KernelTaskRegisterPorts : CBM_KernelRunLevelTask<RL_REGISTERPORTS>
119 lerr_t execute( kernel_t *, RunLevelArgs *);
121struct CBM_API CBM_KernelTaskInitialize : CBM_KernelRunLevelTask<RL_INITIALIZE>
123 lerr_t execute( kernel_t *, RunLevelArgs *);
126struct CBM_API CBM_KernelTaskRead : CBM_KernelRunLevelTask<RL_READ>
128 lerr_t execute( kernel_t *, RunLevelArgs *);
130struct CBM_API CBM_KernelTaskSolve : CBM_KernelRunLevelTask<RL_SOLVE>
132 lerr_t execute( kernel_t *, RunLevelArgs *);
134struct CBM_API CBM_KernelTaskIntegrate : CBM_KernelRunLevelTask<RL_INTEGRATE>
136 lerr_t execute( kernel_t *, RunLevelArgs *);
138struct CBM_API CBM_KernelTaskWrite : CBM_KernelRunLevelTask<RL_WRITE>
140 lerr_t execute( kernel_t *, RunLevelArgs *);
143struct CBM_API CBM_KernelTaskUnregisterPorts : CBM_KernelRunLevelTask<RL_UNREGISTERPORTS>
145 lerr_t execute( kernel_t *, RunLevelArgs *);
147struct CBM_API CBM_KernelTaskFinalize : CBM_KernelRunLevelTask<RL_FINALIZE>
149 lerr_t execute( kernel_t *, RunLevelArgs *);
152class CBM_API kernel_t :
public kernel_object_t
154 CBM_KernelTask * tasks[RL_ALL];
156 void set_runlevel_task( RunLevel, CBM_KernelTask *);
157 lerr_t execute_runlevel( RunLevelArgs *);
160 virtual char const * name()
const = 0;
161 virtual char const * ID()
const = 0;
162 virtual char const * model_name()
163 const {
return this->name(); }
165#ifdef CRABMEAT_KERNEL_STATISTICS
167 cbm::resources_statistics_t stats;
173 virtual ~kernel_t() = 0;
177 virtual lerr_t configure( RunLevelArgs *)
178 {
return LDNDC_ERR_OK; }
180 virtual lerr_t register_ports( RunLevelArgs *)
181 {
return LDNDC_ERR_OK; }
183 virtual lerr_t initialize( RunLevelArgs *)
184 {
return LDNDC_ERR_OK; }
187 virtual lerr_t read( RunLevelArgs *)
188 {
return LDNDC_ERR_OK; }
190 virtual lerr_t solve( RunLevelArgs *)
191 {
return LDNDC_ERR_OK; }
193 virtual lerr_t integrate( RunLevelArgs *)
194 {
return LDNDC_ERR_OK; }
196 virtual lerr_t write( RunLevelArgs *)
197 {
return LDNDC_ERR_OK; }
200 virtual lerr_t finalize( RunLevelArgs *)
201 {
return LDNDC_ERR_OK; }
203 virtual lerr_t unregister_ports( RunLevelArgs *)
204 {
return LDNDC_ERR_OK; }
207 virtual int process_request(
208 reply_t *, request_t
const *)
210 virtual int query_feature(
char ** ,
214#ifdef CRABMEAT_OUTPUTS_SERIALIZE
215 virtual int create_checkpoint()
217 virtual int restore_checkpoint( ldate_t)
221 cbm::ksetup_t setup_parser(
char const * ,
222 char const * = NULL );
226 bool is_active()
const
227 {
return this->m_status == 0; }
229 { this->m_status = 1; }
235 {
return this->m_rank; }
236 void rank(
int _rank)
237 { this->m_rank = _rank; }
242 cbm::uri_t
const & uri()
const
243 {
return this->m_uri; }
244 void uri( cbm::uri_t
const & _uri)
245 { this->m_uri = _uri; }
250 typedef lerr_t (kernel_t::*RunLevelMaintenanceTask)( RunLevelArgs *);
251 RunLevelMaintenanceTask pre_tasks[RL_ALL];
252 lerr_t pre_execute_runlevel( RunLevelArgs *);
253 RunLevelMaintenanceTask post_tasks[RL_ALL];
254 lerr_t post_execute_runlevel( RunLevelArgs *);
256 lerr_t pre_configure( RunLevelArgs *);
257 lerr_t post_configure( RunLevelArgs *);
259 lerr_t pre_register_ports( RunLevelArgs *);
260 lerr_t post_register_ports( RunLevelArgs *);
262 lerr_t pre_initialize( RunLevelArgs *);
263 lerr_t post_initialize( RunLevelArgs *);
266 lerr_t pre_read( RunLevelArgs *);
267 lerr_t post_read( RunLevelArgs *);
269 lerr_t pre_solve( RunLevelArgs *);
270 lerr_t post_solve( RunLevelArgs *);
272 lerr_t pre_integrate( RunLevelArgs *);
273 lerr_t post_integrate( RunLevelArgs *);
275 lerr_t pre_write( RunLevelArgs *);
276 lerr_t post_write( RunLevelArgs *);
279 lerr_t pre_finalize( RunLevelArgs *);
280 lerr_t post_finalize( RunLevelArgs *);
282 lerr_t pre_unregister_ports( RunLevelArgs *);
283 lerr_t post_unregister_ports( RunLevelArgs *);
289#define CBM_KERNEL_LINKME(__name__) int ldndc_kernel_force_link_##__name__ = 0;
290#define CBM_KERNEL_LINKIT(__name__) void ldndc_kernel_force_link_function_##__name__( void) { extern int ldndc_kernel_force_link_##__name__; ldndc_kernel_force_link_##__name__ = 1; }
The "Service Registry" holds information about available services (e.g., models, readers,...
Definition Lresources.h:51