AERA
hlp_context.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 hlp_context_h
86 #define hlp_context_h
87 
88 #include "../r_code/object.h"
89 
90 #include "_context.h"
91 #include "hlp_overlay.h"
92 
93 
94 namespace r_exec {
95 
96 class dll_export HLPContext :
97  public _Context {
98 public:
99  HLPContext();
100  HLPContext(Atom *code, uint16 index, HLPOverlay *const overlay, Data data = STEM);
101 
102  HLPContext dereference() const;
103 
104  HLPContext &operator =(const HLPContext &c) {
105 
106  code_ = c.code_;
107  index_ = c.index_;
108  return *this;
109  }
110 
111  Atom &operator [](uint16 i) const { return code_[index_ + i]; }
112 
113  bool operator ==(const HLPContext &c) const;
114  bool operator !=(const HLPContext &c) const;
115 
116  HLPContext get_child(uint16 index) const {
117 
118  return HLPContext(code_, index_ + index, (HLPOverlay *)overlay_);
119  }
120 
124  HLPContext get_child_deref(uint16 index) const {
125  return get_child(index).dereference();
126  }
127 
128  bool evaluate() const {
129  if (data_ == BINDING_MAP || data_ == VALUE_ARRAY)
130  return true;
131 
132  HLPContext c = dereference();
133  return c.evaluate_no_dereference();
134  }
135 
136  bool evaluate_no_dereference() const;
137 
138  // _Context implementation.
139  _Context *clone() override { return new HLPContext(*this); }
140 
141  bool equal(const _Context *c) const override { return *this == *(HLPContext *)c; }
142 
143  Atom &get_atom(uint16 i) const override { return this->operator [](i); }
144 
145  uint16 get_object_code_size() const override;
146 
147  uint16 get_children_count() const override {
148 
149  return code_[index_].getAtomCount();
150  }
151 
155  _Context *get_child_new(uint16 index) const override {
156 
157  HLPContext *_c = new HLPContext(get_child(index));
158  return _c;
159  }
160 
164  _Context *dereference_new() const override {
165 
166  HLPContext *_c = new HLPContext(dereference());
167  return _c;
168  }
169 };
170 }
171 
172 
173 #endif
r_exec::HLPContext::dereference_new
_Context * dereference_new() const override
Definition: hlp_context.h:164
r_exec::HLPContext::get_child_deref
HLPContext get_child_deref(uint16 index) const
Definition: hlp_context.h:124
r_exec::HLPContext::get_child_new
_Context * get_child_new(uint16 index) const override
Definition: hlp_context.h:155
r_code::Atom
Definition: atom.h:104
r_exec::HLPOverlay
Definition: hlp_overlay.h:98
r_exec::_Context
Definition: _context.h:96
r_exec::HLPContext
Definition: hlp_context.h:97