#ifndef _MIND_H #define _MIND_H #include #include #include #include #include #include #include #include #include #include #include #include namespace smo { class Mind : public PuppetApplication { public: Mind(void); ~Mind(void) = default; typedef std::function mindLifetimeMgmtOpCbFn; void initializeReq(Callback callback); void finalizeReq(Callback callback); // ComponentThread access methods std::shared_ptr getComponentThread(ThreadId id) const; std::shared_ptr getComponentThread( const std::string& name) const; // Get all this Mind's component threads. std::vector> getMindThreads() const; // CPU distribution method void distributeAndPinThreadsAcrossCpus(); public: director::Director director; simulator::Simulator canvas; PuppetComponent subconscious; body::Body body; PuppetComponent world; private: friend class body::Body; bool bodyComponentInitialized = false; private: class MindLifetimeMgmtOp; }; namespace mind { // Global Mind instance will be defined in marionette.cpp extern std::shared_ptr globalMind; } // namespace mind } // namespace smo #endif