9#ifndef LDNDC_INPUT_EVENTBASE_H_
10#define LDNDC_INPUT_EVENTBASE_H_
12#include "crabmeat-common.h"
14#include "string/cbm_string.h"
15#include "utils/cbm_utils.h"
16#include "memory/cbm_mem.h"
18namespace ldndc{
namespace event{
21struct event_attribute_t
23 virtual ~event_attribute_t() = 0;
26#define LMANA_EVENT_TYPE(__ev_class__,__ev_attr_t__,__ev_type__) \
28 typedef __ev_attr_t__ attributes_type; \
31 event_type_ = __ev_type__ \
33 event_type_e event_type() \
36 return static_cast< event_type_e >( event_type_); \
38 char const * name() const \
39 { return EVENT_NAMES[event_type_]; } \
40 std::string to_string() const; \
43 lid_t const & _id, __ev_attr_t__ const * _attribs) \
44 : Event( _id), attribs_( _attribs) { } \
49 CBM_DefaultAllocator->destroy( attribs_); \
53 __ev_attr_t__ const * attribs_; \
55 __ev_class__( __ev_class__ const &); \
56 __ev_class__ & operator=( __ev_class__ const &);
59#define EVENT_COMMON_DECL(__ev_name__) \
60 LMANA_EVENT_TYPE(__event_class_name(__ev_name__),__event_attrib_class_name(__ev_name__),TOKENPASTE(__EVENT_ENUM_,__ev_name__))
62#define LEVENT_WRITE_ATTRIB_TXT_(__ss__,__key__,__value_prefix__,__value__) \
65 __ss__ << ((cbm::is_empty( (__ss__).str())) ? "" : "; ") \
68 << "\"" << __value_prefix__ << __value__ << "\""; \
70 CRABMEAT_FIX_UNUSED(__ss__)
72#define LEVENT_WRITE_ATTRIB_TXT(__ss__,__key__,__value__) \
73 LEVENT_WRITE_ATTRIB_TXT_(__ss__,__key__,"",this->attribs_->__value__)
74#define LEVENT_WRITE_ATTRIB_PREFIX_TXT(__ss__,__key__,__value_prefix__,__value__) \
75 LEVENT_WRITE_ATTRIB_TXT_(__ss__,__key__,__value_prefix__,this->attribs_->__value__)
87 virtual event_type_e event_type()
const = 0;
88 virtual char const * name()
const = 0;
91 Event( lid_t
const &);
95 const {
return m_id; }
97 virtual std::string to_string()
const = 0;
102 Event( Event
const &);
103 Event & operator=( Event
const &);
106#define __event_class_name(__event_name__) TOKENPASTE(Event__,__event_name__)
107#define __event_attrib_class_name(__event_name__) TOKENPASTE3(event_,__event_name__,_attribute_t)
110#define EVENT_FACTORY_DECL(__event_name__) \
112 extern event_factory_t< __event_class_name(__event_name__), __event_attrib_class_name(__event_name__) > const TOKENPASTE(event_factory_,__event_name__);\
114 extern __event_attrib_class_name(__event_name__) const TOKENPASTE(event_attribute_default_,__event_name__);
116#define EVENT_FACTORY_DEFN(__event_name__) \
118 event_factory_t< __event_class_name(__event_name__), __event_attrib_class_name(__event_name__) > const TOKENPASTE(event_factory_,__event_name__);\
120 __event_attrib_class_name(__event_name__) const TOKENPASTE(event_attribute_default_,__event_name__);
122#include "eventbase.h.inc"
Spatially explicit groundwater model.
Definition airchemistryput.h:15