AERA
submodules
AERA
r_exec
pgm_controller.h
1
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
2
//_/_/
3
//_/_/ AERA
4
//_/_/ Autocatalytic Endogenous Reflective Architecture
5
//_/_/
6
//_/_/ Copyright (c) 2018-2025 Jeff Thompson
7
//_/_/ Copyright (c) 2018-2025 Kristinn R. Thorisson
8
//_/_/ Copyright (c) 2018-2025 Icelandic Institute for Intelligent Machines
9
//_/_/ http://www.iiim.is
10
//_/_/
11
//_/_/ Copyright (c) 2010-2012 Eric Nivel
12
//_/_/ Center for Analysis and Design of Intelligent Agents
13
//_/_/ Reykjavik University, Menntavegur 1, 102 Reykjavik, Iceland
14
//_/_/ http://cadia.ru.is
15
//_/_/
16
//_/_/ Part of this software was developed by Eric Nivel
17
//_/_/ in the HUMANOBS EU research project, which included
18
//_/_/ the following parties:
19
//_/_/
20
//_/_/ Autonomous Systems Laboratory
21
//_/_/ Technical University of Madrid, Spain
22
//_/_/ http://www.aslab.org/
23
//_/_/
24
//_/_/ Communicative Machines
25
//_/_/ Edinburgh, United Kingdom
26
//_/_/ http://www.cmlabs.com/
27
//_/_/
28
//_/_/ Istituto Dalle Molle di Studi sull'Intelligenza Artificiale
29
//_/_/ University of Lugano and SUPSI, Switzerland
30
//_/_/ http://www.idsia.ch/
31
//_/_/
32
//_/_/ Institute of Cognitive Sciences and Technologies
33
//_/_/ Consiglio Nazionale delle Ricerche, Italy
34
//_/_/ http://www.istc.cnr.it/
35
//_/_/
36
//_/_/ Dipartimento di Ingegneria Informatica
37
//_/_/ University of Palermo, Italy
38
//_/_/ http://diid.unipa.it/roboticslab/
39
//_/_/
40
//_/_/
41
//_/_/ --- HUMANOBS Open-Source BSD License, with CADIA Clause v 1.0 ---
42
//_/_/
43
//_/_/ Redistribution and use in source and binary forms, with or without
44
//_/_/ modification, is permitted provided that the following conditions
45
//_/_/ are met:
46
//_/_/ - Redistributions of source code must retain the above copyright
47
//_/_/ and collaboration notice, this list of conditions and the
48
//_/_/ following disclaimer.
49
//_/_/ - Redistributions in binary form must reproduce the above copyright
50
//_/_/ notice, this list of conditions and the following disclaimer
51
//_/_/ in the documentation and/or other materials provided with
52
//_/_/ the distribution.
53
//_/_/
54
//_/_/ - Neither the name of its copyright holders nor the names of its
55
//_/_/ contributors may be used to endorse or promote products
56
//_/_/ derived from this software without specific prior
57
//_/_/ written permission.
58
//_/_/
59
//_/_/ - CADIA Clause: The license granted in and to the software
60
//_/_/ under this agreement is a limited-use license.
61
//_/_/ The software may not be used in furtherance of:
62
//_/_/ (i) intentionally causing bodily injury or severe emotional
63
//_/_/ distress to any person;
64
//_/_/ (ii) invading the personal privacy or violating the human
65
//_/_/ rights of any person; or
66
//_/_/ (iii) committing or preparing for any act of war.
67
//_/_/
68
//_/_/ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
69
//_/_/ CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
70
//_/_/ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
71
//_/_/ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
72
//_/_/ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
73
//_/_/ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
74
//_/_/ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
75
//_/_/ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
76
//_/_/ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
77
//_/_/ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
78
//_/_/ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
79
//_/_/ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
80
//_/_/ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
81
//_/_/ OF SUCH DAMAGE.
82
//_/_/
83
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
84
85
#ifndef pgm_controller_h
86
#define pgm_controller_h
87
88
#include "controller.h"
89
#include "pgm_overlay.h"
90
91
92
namespace
r_exec {
93
94
class
r_exec_dll
_PGMController
:
95
public
OController
{
96
protected
:
97
bool
run_once_;
98
99
_PGMController
(
r_code::_View
*ipgm_view);
100
virtual
~
_PGMController
();
101
public
:
102
r_code::Code
*get_core_object()
const override
{
return
get_object()->get_reference(0); }
103
};
104
105
// TimeCores holding InputLessPGMSignalingJob trigger the injection of the productions.
106
// No overlays.
107
class
r_exec_dll
InputLessPGMController
:
108
public
_PGMController
{
109
public
:
110
InputLessPGMController
(
r_code::_View
*ipgm_view);
111
~
InputLessPGMController
();
112
113
void
signal_input_less_pgm();
114
};
115
116
// Controller for programs with inputs.
117
class
r_exec_dll
PGMController
:
118
public
_PGMController
{
119
public
:
120
PGMController
(
r_code::_View
*ipgm_view);
121
virtual
~
PGMController
();
122
123
void
take_input(
r_exec::View
*input)
override
;
124
void
reduce(
r_exec::View
*input);
125
126
void
notify_reduction();
127
};
128
129
// Signaled by TimeCores (holding AntiPGMSignalingJob).
130
// Possible recursive locks: signal_anti_pgm()->overlay->inject_productions()->mem->inject()->injectNow()->inject_reduction_jobs()->overlay->take_input().
131
class
r_exec_dll
AntiPGMController
:
132
public
_PGMController
{
133
private
:
134
bool
successful_match_;
135
136
void
push_new_signaling_job();
137
public
:
138
AntiPGMController
(
r_code::_View
*ipgm_view);
139
~
AntiPGMController
();
140
141
void
take_input(
r_exec::View
*input)
override
;
142
void
reduce(
r_exec::View
*input);
143
void
signal_anti_pgm();
144
145
void
restart();
146
};
147
}
148
149
#endif
r_exec::PGMController
Definition:
pgm_controller.h:118
r_code::_View
Definition:
r_code/object.h:164
r_exec::_PGMController
Definition:
pgm_controller.h:95
r_exec::InputLessPGMController
Definition:
pgm_controller.h:108
r_code::Code
Definition:
r_code/object.h:224
r_exec::View
Definition:
view.h:102
r_exec::OController
Definition:
controller.h:157
r_exec::AntiPGMController
Definition:
pgm_controller.h:132
Generated by
1.8.18