11#ifndef LDNDC_SUBSTATE_H_
12#define LDNDC_SUBSTATE_H_
15#include "state/mbe_substatetypes.h"
17#include <input/ecosystemtypes.h>
18#include <cbm_object.h>
23#define __LDNDC_SUBSTATE_CLASS(__substate__) TOKENPASTE3(substate_,__substate__,_t)
24#define MOBILE_SUBSTATE_OBJECT(__type__,__flags__) \
25 LDNDC_OBJECT(__LDNDC_SUBSTATE_CLASS(__type__)) \
26 private: static char const * const ss_name; \
27 public: char const * name() const { return ss_name;} \
31 substate_type = (__ldndc_substate_enum_##__type__) \
34 static lflags_t flags() \
40 __LDNDC_SUBSTATE_CLASS(__type__)(); \
41 __LDNDC_SUBSTATE_CLASS(__type__)( \
42 lid_t const &, MoBiLE_PlantVegetation *); \
44 ~__LDNDC_SUBSTATE_CLASS(__type__)(); \
51 bool set_required_inputs_( \
53 bool has_required_inputs_( \
54 cbm::io_kcomm_t *) const; \
56 lerr_t resize_entities( \
60 __LDNDC_SUBSTATE_CLASS(__type__)( \
61 __LDNDC_SUBSTATE_CLASS(__type__) const &); \
62 __LDNDC_SUBSTATE_CLASS(__type__) & operator=( \
63 __LDNDC_SUBSTATE_CLASS(__type__) const &)
65#define MOBILE_SUBSTATE_OBJECT_DEFN(__type__) \
66 LDNDC_OBJECT_DEFN(ldndc::__LDNDC_SUBSTATE_CLASS(__type__)) \
67 char const * const ldndc::__LDNDC_SUBSTATE_CLASS(__type__)::ss_name = \
68 SUBSTATE_NAMES[__ldndc_substate_enum_##__type__];
72struct substate_checkpoint_read_context_t;
73struct substate_checkpoint_write_context_t;
83class LDNDC_API MoBiLE_Substate :
public cbm::object_t
87 MoBiLE_Substate( lid_t
const &);
88 virtual ~MoBiLE_Substate() = 0;
90 virtual char const * name()
const = 0;
101 virtual lerr_t initialize( cbm::io_kcomm_t *,
void * = NULL) = 0;
107 virtual size_t member_cnt()
const = 0;
116 virtual size_t alloc_size()
const = 0;
122 virtual lerr_t resize_entities( cbm::io_kcomm_t *) = 0;
136 bool is_initialized()
const
137 {
return is_initialized_; }
139#ifdef _HAVE_SERIALIZE
140 virtual int create_checkpoint( substate_checkpoint_write_context_t *) = 0;
141 virtual int restore_checkpoint( substate_checkpoint_read_context_t *) = 0;
143#ifdef _LDNDC_HAVE_ONLINECONTROL
144 virtual int process_request(
145 lreply_t * , lrequest_t
const * )
146 {
return LDNDC_ERR_OK;}
161 void set_initialized()
163 is_initialized_ =
true;
167 MoBiLE_Substate( MoBiLE_Substate
const &);
169 MoBiLE_Substate & operator=( MoBiLE_Substate
const &);
172 static cbm::string_t wr_type;
175 bool is_initialized_;
179class MoBiLE_PlantVegetation;
180struct LDNDC_API substate_factory_base_t
185 return SUBSTATE_NAMES[substate_type()];
189 substate_factory_base_t() {}
190 virtual ~substate_factory_base_t() = 0;
192 virtual substate_type_e substate_type()
const = 0;
194 virtual size_t memsize()
const = 0;
196 virtual MoBiLE_Substate * construct(
197 lid_t
const &, MoBiLE_PlantVegetation *)
const = 0;
198 virtual void destruct(
199 MoBiLE_Substate *)
const = 0;
204struct substate_factory_t : substate_factory_base_t
207 : substate_factory_base_t()
210 substate_type_e substate_type()
const
211 {
return (substate_type_e)_S::substate_type; }
213 size_t memsize()
const
214 {
return sizeof( _S); }
216 MoBiLE_Substate * construct(
217 lid_t
const & _id, MoBiLE_PlantVegetation * _pv)
221 return static_cast< MoBiLE_Substate *
>(
new _S( _id, _pv));
224 void destruct( MoBiLE_Substate * _s)
const
234#define LDNDC_INAME(__iclass__) (ldndc::__iclass__::input_class_ ## __iclass__ ## _t::iclassname())
238#include <containers/cbm_vector.h>
Spatially explicit groundwater model.
Definition: airchemistryput.h:15
@ LSUB_FLAG_NONE
Definition: mbe_substate.h:77