12#ifndef CBM_KSPATIAL_H_
13#define CBM_KSPATIAL_H_
15#include "crabmeat-common.h"
16#include "cbm_servreg.h"
18#include "kernel/kbase.h"
19#include "kernel/kmount.h"
21#include "kernel/kfactory.h"
22#include "kernel/kfactorystore.h"
24#include "string/cbm_string.h"
25#include "time/cbm_time.h"
28#include "input/setup/setup.h"
30typedef source_descriptor_t kdesc_t;
31typedef ldndc::setup::input_class_setup_t setup_t;
34#include "containers/cbm_set.h"
44#define IsCreated 0x0001
45#define IsInitialized 0x0002
46#define IsRegisteredPorts 0x0004
47#define IsUnregisteredPorts 0x0008
48#define IsFinalized 0x0010
49#define IsDestroyed 0x0020
75 cbm::string_t ksource;
78 cbm::string_t kclient_uri;
79 cbm::mountargs_t mountargs;
87 {
return this->m_queue.empty(); }
89 {
return this->m_queue.size(); }
91 lerr_t push_back( kqueue_data_t & _qe)
93 cbm::mountargs_t & args = _qe.mountargs;
96 args.cfg = cbm::strdup( args.cfg);
98 {
return LDNDC_ERR_NOMEM; }
100 this->m_queue.push_back( _qe);
105 kqueue_data_t * qe = this->front();
106 if ( qe && qe->mountargs.cfg)
107 { cbm::strfree( qe->mountargs.cfg); }
108 this->m_queue.pop_front();
110 kqueue_data_t * front()
111 {
return this->is_empty() ? NULL : &this->m_queue.front(); }
112 kqueue_data_t
const * front()
const
113 {
return this->is_empty() ? NULL : &this->m_queue.front(); }
117 while ( !this->is_empty())
118 { this->pop_front(); }
119 this->m_queue.clear();
122 typedef std::list< kqueue_data_t > _kqueue_t;
126struct CBM_API uri_generate_t
128 static cbm::uri_t generate( kqueue_data_t
const *,
138#define KNodeMemoryReserveCount 32
139class CBM_API knodes_t
146 {
return CBM_SetSize( this->m_nodes); }
148 knode_t * insert_node( knode_t * , knode_t *);
149 knode_t * remove_node( knode_t *, cbm::string_t
const & );
155 const_iterator( CBM_Set
const &);
156 const_iterator & operator++()
158 if ( !CBM_SetNodeIteratorIsEnd( this->m_ni))
159 { this->m_ni = CBM_SetFindNext( this->m_ni); }
162 knode_t
const * operator*()
163 {
return static_cast< knode_t *
>( this->m_ni.value); }
164 bool operator==( const_iterator
const & _rhs)
const
165 {
return this->m_ni.value == _rhs.m_ni.value; }
166 bool operator!=( const_iterator
const & _rhs)
const
167 {
return !this->operator==( _rhs); }
169 CBM_SetNodeIterator m_ni;
171 const_iterator cbegin()
const
172 {
return const_iterator( this->m_nodes); }
173 const_iterator cend()
const
174 {
return const_iterator(); }
180 iterator( CBM_Set &);
181 iterator & operator++()
183 if ( !CBM_SetNodeIteratorIsEnd( this->m_ni))
184 { this->m_ni = CBM_SetFindNext( this->m_ni); }
187 knode_t * operator*()
188 {
return static_cast< knode_t *
>( this->m_ni.value); }
189 bool operator==( iterator
const & _rhs)
const
190 {
return this->m_ni.value == _rhs.m_ni.value; }
191 bool operator!=( iterator
const & _rhs)
const
192 {
return !this->operator==( _rhs); }
194 CBM_SetNodeIterator m_ni;
197 {
return iterator( this->m_nodes); }
199 {
return iterator(); }
201 knode_t * find_node( cbm::string_t
const &);
202 knode_t
const * find_node( cbm::string_t
const &)
const;
208class CBM_API kspatial_t :
public kernel_t
210 CBM_KERNEL_OBJECT(kspatial_t,__mounter__)
215 bool is_valid_simulation()
const
216 {
return this->number_of_alive_kernels() > 0; }
217 bool is_complete_simulation()
const
218 {
return this->number_of_valid_kernels()
219 == this->number_of_alive_kernels(); }
221 size_t number_of_kernels()
const;
222 size_t number_of_alive_kernels()
const;
223 size_t number_of_valid_kernels()
const;
229 kernel_t
const * kernel_by_uri( uri_t
const &)
const;
230 kernel_t * kernel_by_uri( uri_t
const &);
232 knodes_t & get_knodes()
233 {
return this->m_knodes; }
234 knodes_t
const & get_knodes()
const
235 {
return this->m_knodes; }
238 void set_modelcompositor(
char const * );
241 lerr_t configure( RunLevelArgs *);
243 lerr_t initialize( RunLevelArgs *);
244 lerr_t initialize_domain( kdesc_t
const *,
size_t);
246 lerr_t read( RunLevelArgs *);
247 lerr_t finalize( RunLevelArgs *);
252 io_kcomm_t * m_iokcomm;
258 cbm::service_registry_t m_servreg;
261 cbm::string_t m_modelcompositor;
264 std::map< std::string, int > m_ranks;
267 lerr_t enqueue_for_mount( cbm::string_t
const & ,
268 lid_t
const & , cbm::string_t ,
269 kernel_t * , cbm::mountargs_t
const * );
270 lerr_t enqueue_for_umount(
271 cbm::string_t
const & , kernel_t * );
273 cbm::services_t resolve_services( cbm::entities_t
const &,
274 cbm::services_t
const &,
int * );
278 void deactivate_kernel( knode_t & );
286 lerr_t kernels_create();
287 lerr_t kernel_create( kqueue_data_t
const *, knode_t *);
289 lerr_t kernels_registerports();
290 lerr_t kernels_initialize();
291 lerr_t kernels_finalize();
292 lerr_t kernels_unregisterports();
294 lerr_t kernels_destroy();
298 lerr_t m_kernelsrunlevel( RunLevel,
int ,
int );
299 lerr_t m_kernelsrunlevel( RunLevel,
int ,
300 knode_t * , knode_t ** );
304 kspatial_t( kspatial_t
const &);
305 kspatial_t & operator=( kspatial_t
const &);
The "Service Registry" holds information about available services (e.g., models, readers,...
Definition Lresources.h:51