Develop Biology
The language of life
Macros.h
Go to the documentation of this file.
1/*
2 * This file is a part of the Biology project by eons LLC.
3 * Biology (aka Develop Biology) is a framework for approaching software
4 * development from a natural sciences perspective.
5 *
6 * Copyright (C) 2022 Séon O'Shannon & eons LLC
7 *
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU Affero General Public License as
10 * published by the Free Software Foundation, either version 3 of the
11 * License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU Affero General Public License for more details.
17 *
18 * You should have received a copy of the GNU Affero General Public License
19 * along with this program. If not, see <https://www.gnu.org/licenses/>.
20 */
21
22#pragma once
23
24
25//@formatter:off
26
28#include "ClassMethodMacros.h"
31
36#define BIO_GET_REQUIRED_CLASS_METHODS_FOR_physical() \
37 ( \
38 virtual ::bio::physical::Wave* Clone() const, \
39 Clone() \
40 ), \
41 ( \
42 virtual ::bio::physical::Wave* AsWave(), \
43 AsWave() \
44 ), \
45 ( \
46 virtual const ::bio::physical::Wave* AsWave() const, \
47 AsWave() \
48 ), \
49 ( \
50 virtual operator ::bio::physical::Wave*(), \
51 operator ::bio::physical::Wave*() \
52 )
53
58#define BIO_GET_OPTIONAL_CLASS_METHODS_FOR_physical() \
59 ( \
60 virtual ::bio::physical::Wave* Modulate(::bio::physical::Wave* signal),\
61 Modulate(signal) \
62 ), \
63 ( \
64 virtual ::bio::physical::Wave* Demodulate(), \
65 Demodulate() \
66 ), \
67 ( \
68 virtual const ::bio::physical::Wave* Demodulate() const, \
69 Demodulate() \
70 )
71
72
78#define BIO_CODE_FUNCTION_BODY(functionName) \
79BIO_ID_FUNCTION_BODY( \
80 functionName##Code, \
81 ::bio::CodePerspective::Instance(), \
82 ::bio::Code)
83
89#define BIO_STATE_FUNCTION_BODY(functionName) \
90BIO_ID_FUNCTION_BODY( \
91 functionName##State, \
92 ::bio::StatePerspective::Instance(), \
93 ::bio::State)
94
95
101#define BIO_PROPERTY_FUNCTION_BODY(functionName) \
102BIO_ID_FUNCTION_BODY( \
103 functionName##Property, \
104 ::bio::PropertyPerspective::Instance(), \
105 ::bio::Property)
106
112#define BIO_SYMMETRY_TYPE_FUNCTION_BODY(functionName) \
113BIO_ID_FUNCTION_BODY( \
114 functionName##SymmetryType, \
115 ::bio::SymmetryTypePerspective::Instance(), \
116 ::bio::SymmetryType)
117
123#define BIO_FILTER_FUNCTION_BODY(functionName) \
124BIO_ID_FUNCTION_BODY( \
125 functionName##Filter, \
126 ::bio::FilterPerspective::Instance(), \
127 ::bio::Filter)
128