AERA
reduction_job.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 reduction_job_h
86 #define reduction_job_h
87 
88 #include "../r_code/utils.h"
89 #include "object.h"
90 #include "mem_output.h"
91 
92 
93 namespace r_exec {
94 
95 class r_exec_dll _ReductionJob :
96  public _Object {
97 protected:
98  _ReductionJob();
99  void register_latency(Timestamp now);
100 public:
101  Timestamp ijt_; // time of injection of the job in the pipe.
102  virtual bool update(Timestamp now) = 0; // return false to shutdown the reduction core.
103  virtual void debug() {}
104  uint32 get_job_id() const { return job_id_; }
105 private:
106  static uint32 job_count_;
107  int job_id_;
108 };
109 
110 template<class _P> class ReductionJob :
111  public _ReductionJob {
112 public:
113  P<View> input_;
114  P<_P> processor_;
115  ReductionJob(View *input, _P *processor) : _ReductionJob(), input_(input), processor_(processor) {}
116  bool update(Timestamp now) override {
117 
118  register_latency(now);
119 #ifdef WITH_DETAIL_OID
120  OUTPUT_LINE((TraceLevel)0, r_code::Utils::RelativeTime(now) << " ReductionJob " << get_job_id() <<
121  ": controller(" << processor_->get_detail_oid() << ")->reduce(View(fact_" <<
122  input_->object_->get_oid() << "))");
123 #endif
124  processor_->reduce(input_);
125  return true;
126  }
127  void debug() override {
128 
129  processor_->debug(input_);
130  }
131 };
132 
133 template<class _P, class T, class C> class BatchReductionJob :
134  public _ReductionJob {
135 public:
136  P<_P> processor_; // the controller that will process the job.
137  P<T> trigger_; // the event that triggered the job.
138  P<C> controller_; // the controller that produced the job.
139  BatchReductionJob(_P *processor, T *trigger, C *controller) : _ReductionJob(), processor_(processor), trigger_(trigger), controller_(controller) {}
140  bool update(Timestamp now) override {
141 
142  register_latency(now);
143 #ifdef WITH_DETAIL_OID
144  OUTPUT_LINE((TraceLevel)0, r_code::Utils::RelativeTime(now) << " BatchReductionJob " << get_job_id() <<
145  ": controller(" << controller_->get_detail_oid() << "), trigger fact(" <<
146  trigger_->get_detail_oid() << ")");
147 #endif
148  processor_->reduce_batch(trigger_, controller_);
149  return true;
150  }
151 };
152 
153 class r_exec_dll ShutdownReductionCore :
154  public _ReductionJob {
155 public:
156  bool update(Timestamp now) override;
157 };
158 
159 class r_exec_dll AsyncInjectionJob :
160  public _ReductionJob {
161 public:
162  P<View> input_;
163  AsyncInjectionJob(View *input) : _ReductionJob(), input_(input) {}
164  bool update(Timestamp now) override;
165 };
166 }
167 
168 
169 #endif
r_exec::ShutdownReductionCore
Definition: reduction_job.h:154
core::P
Definition: base.h:103
r_exec::BatchReductionJob
Definition: reduction_job.h:134
r_exec::AsyncInjectionJob
Definition: reduction_job.h:160
core::_Object
Definition: base.h:131
r_exec::_ReductionJob
Definition: reduction_job.h:96
r_exec::View
Definition: view.h:102
r_exec::ReductionJob
Definition: reduction_job.h:111