OMNeT++ API
6.1
Discrete Event Simulation Library
onstartup.h
1
//==========================================================================
2
// ONSTARTUP.H - part of
3
// OMNeT++/OMNEST
4
// Discrete System Simulation in C++
5
//
6
//==========================================================================
7
8
/*--------------------------------------------------------------*
9
Copyright (C) 1992-2017 Andras Varga
10
Copyright (C) 2006-2017 OpenSim Ltd.
11
12
This file is distributed WITHOUT ANY WARRANTY. See the file
13
`license' for details on this and other legal matters.
14
*--------------------------------------------------------------*/
15
16
#ifndef __OMNETPP_ONSTARTUP_H
17
#define __OMNETPP_ONSTARTUP_H
18
19
#include <vector>
20
#include <map>
21
#include "simkerneldefs.h"
22
#include "cownedobject.h"
23
24
namespace
omnetpp {
25
26
27
// Generating identifiers unique for this file. See MSVC Help for __COUNTER__ for more info.
28
#define __OPPCONCAT1(x,y) x##y
29
#define __OPPCONCAT2(prefix,line) __OPPCONCAT1(prefix,line)
30
#define MAKE_UNIQUE_WITHIN_FILE(prefix) __OPPCONCAT2(prefix,__LINE__)
31
32
// helpers for EXECUTE_ON_STARTUP
33
// IMPORTANT: if you change "__onstartup_func_" below, linkall.pl must also be updated!
34
#define __ONSTARTUP_FUNC MAKE_UNIQUE_WITHIN_FILE(__onstartup_func_)
35
#define __ONSTARTUP_OBJ MAKE_UNIQUE_WITHIN_FILE(__onstartup_obj_)
36
37
// helper
38
#define __FILEUNIQUENAME__ MAKE_UNIQUE_WITHIN_FILE(__uniquename_)
39
49
#define EXECUTE_ON_STARTUP(CODE) \
50
namespace { \
51
void __ONSTARTUP_FUNC() {CODE;} \
52
static omnetpp::CodeFragments __ONSTARTUP_OBJ(__ONSTARTUP_FUNC, #CODE, omnetpp::CodeFragments::STARTUP); \
53
}
54
63
//NOTE: implementation reuses some of the *startup* macros
64
#define EXECUTE_ON_SHUTDOWN(CODE) \
65
namespace { \
66
void __ONSTARTUP_FUNC() {CODE;} \
67
static omnetpp::CodeFragments __ONSTARTUP_OBJ(__ONSTARTUP_FUNC, #CODE, omnetpp::CodeFragments::SHUTDOWN); \
68
}
69
75
class
SIM_API
CodeFragments
76
{
77
public
:
78
enum
Type {STARTUP, SHUTDOWN};
79
Type type;
80
void (*code)();
81
const
char
*sourceCode;
82
CodeFragments
*next;
83
static
CodeFragments
*head;
84
public
:
85
CodeFragments
(
void
(*code)(),
const
char
*sourceCode, Type type);
86
~
CodeFragments
() {}
87
static
void
executeAll(Type type);
88
};
89
90
}
// namespace omnetpp
91
92
93
#endif
94
omnetpp::CodeFragments
Supporting class for the EXECUTE_ON_STARTUP and EXECUTE_ON_SHUTDOWN macros.
Definition:
onstartup.h:75
include
omnetpp
onstartup.h
Generated by
1.8.17