5#include "acme/prototype/prototype/property_object.h"
6#include "acme/handler/handler_context.h"
7#include "acme/parallelization/create_task_attributes.h"
10class CLASS_DECL_ACME
object :
18 ::pointer < ::object > m_pobjectParentTask;
19 ::pointer < ::pointer_array < ::particle > > m_pparticleaChildrenTask;
20 ::pointer < ::map_particle < atom_map_base < ::pointer < ::parallelization::queue > > > > m_pqueuemap;
23 ::pointer < ::procedure_array > m_pprocedureaDestroying;
24 ::pointer < ::comparable_array< ::particle * > > m_pparticleaNotify;
30 ::particle * m_pparticleContext;
32 ::object_meta * m_pmeta;
35 object() : m_pmeta(nullptr), m_pparticleContext(nullptr) { }
42 virtual ::i64 increment_reference_count()
override;
43 virtual ::i64 decrement_reference_count()
override;
44 virtual ::i64 release()
override;
50 virtual ::i64 increment_reference_count();
51 virtual ::i64 decrement_reference_count();
52 virtual ::i64 release();
58 ::procedure_array_base& destroyinga() { ødefer_raw_construct_new(m_pprocedureaDestroying);
59 return *m_pprocedureaDestroying; }
60 ::comparable_array_base< ::particle* >& notifya() { ødefer_raw_construct_new(m_pparticleaNotify);
61 return *m_pparticleaNotify; }
62 void on_notify(::particle * pparticle, enum_id eid)
override;
66 template <
typename BASE_TYPE >
67 ::pointer<BASE_TYPE>file_as(const ::payload& payloadFile);
70 virtual void add_procedure(const ::atom& idRoutine, const ::procedure & procedure);
73 virtual void add_each_routine_from(const ::atom& idRoutine, ::object* pobjectSource);
76 virtual ::procedure_array procedure_array(const ::atom& idRoutine);
79 virtual void call_routine2(const ::procedure & procedure);
82 virtual void call_procedures(const ::atom& atom);
85 virtual void post_procedures(const ::atom& atom);
88 virtual void send_procedures(const ::atom& atom);
94 virtual ::text::text __text(const ::atom& atom);
97 virtual void task_erase(::task* ptask)
override;
100 virtual void notify(::enum_id eid, ::handler_context * phandlercontext =
nullptr);
103 virtual void sleep(
const class ::time& time);
106 template <
typename BASE_TYPE >
107 void save_to(const ::payload& payloadFile, BASE_TYPE* pparticle);
110 virtual void initialize(::particle * pparticle)
override;
111 virtual void set_finish()
override;
114 virtual void add_task(::object* pobjectTask);
115 virtual void erase_task_and_set_task_new_parent(::object* pobjectTask, ::object * pobjectTaskNewParent);
116 virtual void transfer_tasks_from(::object * ptask);
117 virtual bool is_ascendant_task(::object * ptaskCandidateAscendant)
const;
124 virtual bool is_thread_class()
const override;
125 bool should_run()
const override;
126 virtual bool is_task_set2()
const;
130 virtual void branch_send(const ::procedure & procedure, manual_reset_happening * phappening);
140 virtual bool has_child_task()
const;
141 virtual void set_child_tasks_to_finish();
145 void destroy()
override;
147 virtual void on_destroy();
149 virtual void destroy_tasks();
152 void create_object_meta();
154 inline void defer_object_meta() {
if (::is_null(m_pmeta)) create_object_meta(); }
156 inline ::object_meta * get_meta() { defer_object_meta();
return m_pmeta; }
159 ::extended_topic_pointer create_extended_topic(const ::atom & atom)
override;
161 virtual void dev_log(const ::scoped_string & scopedstr);
164 virtual void delete_this()
override;
166 virtual void destruct();
168 virtual void handle_exception(const ::exception& e)
override;
170 virtual void top_handle_exception(const ::exception& e);
172 virtual void process_exception(const ::exception& e);
175 ::property_object* parent_property_set_holder()
const override;
180 virtual string get_tag()
const;
183 virtual void defer_update_object_id();
184 virtual ::atom calc_default_object_id()
const;
189 void message_receiver_destruct();
191 void _001OnUpdate(::message::message* pmessage);
229 virtual bool __is_child_task(::particle * pparticle)
const;
233 bool IsSerializable()
const;
235 void branch(const ::procedure_array& routinea);
236 void branch_each(const ::procedure_array& routinea);
238 template <
typename TASK >
239 inline ::pointer<TASK>& defer_branch(::pointer<TASK> ptask, const ::procedure & procedure)
242 if (ptask && ptask->is_running())
249 defer_construct_newø(ptask);
251 ptask->m_procedure = procedure;
260 template <
typename THREAD >
261 inline ::pointer<THREAD> defer_branch(::pointer<THREAD>pthread)
264 if (pthread && pthread->is_running())
271 pthread->begin_thread();
278 void defer_branch(::task_pointer& ptask, const ::procedure & procedure);
280 ::pointer<task> fork(const ::procedure & procedure);
282 ::pointer<task> fork(const ::procedure & procedure,
const create_task_attributes& createtaskattributes);
284 dispatch_arrayø forkø();
286 virtual ::pointer < ::parallelization::queue> queue(const ::atom & atomQueue);
288 virtual ::pointer<::task> branch_procedure(const ::procedure& procedure,
bool bAutoDelete =
true, enum_parallelization eparallelization = e_parallelization_asynchronous,
const create_task_attributes_t & createtaskattributes = {});
290 virtual ::pointer<::task> branch_procedure_synchronously(const ::procedure& procedure,
bool bAutoDelete =
true,
const create_task_attributes_t& createtaskattributes = {});
292 virtual ::task_pointer run_procedure(enum_synchronicity esynchronicity, const ::procedure & procedure);
294 template <
typename TYPE >
295 ::task_pointer branch_below_normal(
void (TYPE::* pfn)())
298 return branch(pfn, ::e_priority_below_normal);
303 ::task_pointer defer_branch(const ::atom& atom, const ::procedure & procedure, enum_priority epriority = e_priority_normal);
305 virtual ::particle * get_taskpool_container()
override;
307 ::object& operator = (const ::payload& payload);
311 string as_string()
const override;
313 void single_fork(const ::procedure_array& routinea);
314 void multiple_fork(const ::procedure_array& routinea);
317 template < prototype_function FUNCTION >
318 void hold_signal_function(::data::signal<FUNCTION> * psignal,
const FUNCTION & function);
326#define __make_identifier(PART1, PART2) PART1 ## PART2
329#define __defer_branch(procedure) defer_branch(m_p ## procedure, [this](){procedure();})
336#define __PROPERTIES(xxx) \
337class __ ## xxx ## _properties : \
338 public ::property_set \
343#define __PROPERTY(type, name, ID) type & name = reference(ID)
Definition handler_context.h:9
Definition bbb_object.h:11
Definition property_object.h:21