85 #ifndef r_exec_object_h
86 #define r_exec_object_h
88 #include "../submodules/CoreLibrary/CoreLibrary/utils.h"
89 #include "../r_code/object.h"
98 static inline bool IsNotification(
r_code::Code *
object) {
100 switch (object->code(0).getDescriptor()) {
101 case r_code::Atom::MARKER:
102 return object->code(0).asOpcode() == Opcodes::MkActChg ||
103 object->code(0).asOpcode() == Opcodes::MkHighAct ||
104 object->code(0).asOpcode() == Opcodes::MkHighSln ||
105 object->code(0).asOpcode() == Opcodes::MkLowAct ||
106 object->code(0).asOpcode() == Opcodes::MkLowRes ||
107 object->code(0).asOpcode() == Opcodes::MkLowSln ||
108 object->code(0).asOpcode() == Opcodes::MkNew ||
109 object->code(0).asOpcode() == Opcodes::MkRdx ||
110 object->code(0).asOpcode() == Opcodes::MkSlnChg;
120 template<
class C,
class U>
class Object :
125 volatile uint32 invalidated_;
138 return r_code::Code::build_view<r_exec::View>(source);
141 bool is_invalidated()
override;
142 bool invalidate()
override;
144 void compute_hash_value();
146 float32 get_psln_thr()
override;
148 void acq_views()
override { viewsCS_.enter(); }
149 void rel_views()
override { viewsCS_.leave(); }
150 void acq_markers()
override { markersCS_.enter(); }
151 void rel_markers()
override { markersCS_.leave(); }
154 void set(uint16 member_index, float32 value)
override;
155 void mod(uint16 member_index, float32 value)
override;
161 size_t operator ()(U *o)
const {
163 if (o->hash_value_ == 0)
164 o->compute_hash_value();
165 return o->hash_value_;
171 bool operator ()(
const U *lhs,
const U *rhs)
const {
173 if (lhs->code(0).asOpcode() == Opcodes::Ent || rhs->code(0).asOpcode() == Opcodes::Ent)
177 for (i = 0; i < lhs->references_size(); ++i)
178 if (lhs->get_reference(i) != rhs->get_reference(i))
180 for (i = 0; i < lhs->code_size(); ++i) {
182 if (lhs->code(i) != rhs->code(i))
195 public Object<r_code::LocalObject, LObject> {
197 static bool RequiresPacking() {
return false; }