diff options
Diffstat (limited to 'src/uscxml/interpreter')
-rw-r--r-- | src/uscxml/interpreter/BasicContentExecutor.cpp | 4 | ||||
-rw-r--r-- | src/uscxml/interpreter/BasicContentExecutor.h | 2 | ||||
-rw-r--r-- | src/uscxml/interpreter/BasicEventQueue.cpp | 10 | ||||
-rw-r--r-- | src/uscxml/interpreter/BasicEventQueue.h | 7 | ||||
-rw-r--r-- | src/uscxml/interpreter/ContentExecutor.cpp | 4 | ||||
-rw-r--r-- | src/uscxml/interpreter/ContentExecutor.h | 3 | ||||
-rw-r--r-- | src/uscxml/interpreter/ContentExecutorImpl.h | 2 | ||||
-rw-r--r-- | src/uscxml/interpreter/EventQueue.cpp | 10 | ||||
-rw-r--r-- | src/uscxml/interpreter/EventQueue.h | 4 | ||||
-rw-r--r-- | src/uscxml/interpreter/EventQueueImpl.h | 2 | ||||
-rw-r--r-- | src/uscxml/interpreter/FastMicroStep.cpp | 6 | ||||
-rw-r--r-- | src/uscxml/interpreter/FastMicroStep.h | 1 | ||||
-rw-r--r-- | src/uscxml/interpreter/MicroStep.cpp | 5 | ||||
-rw-r--r-- | src/uscxml/interpreter/MicroStep.h | 1 | ||||
-rw-r--r-- | src/uscxml/interpreter/MicroStepImpl.h | 3 |
15 files changed, 58 insertions, 6 deletions
diff --git a/src/uscxml/interpreter/BasicContentExecutor.cpp b/src/uscxml/interpreter/BasicContentExecutor.cpp index 6b12afd..a2ebc5c 100644 --- a/src/uscxml/interpreter/BasicContentExecutor.cpp +++ b/src/uscxml/interpreter/BasicContentExecutor.cpp @@ -35,6 +35,10 @@ namespace uscxml { using namespace XERCESC_NS; +std::shared_ptr<ContentExecutorImpl> BasicContentExecutor::create(ContentExecutorCallbacks* callbacks) { + return std::shared_ptr<ContentExecutorImpl>(new BasicContentExecutor(callbacks)); +} + void BasicContentExecutor::processRaise(XERCESC_NS::DOMElement* content) { Event raised(ATTR(content, "event")); _callbacks->enqueueInternal(raised); diff --git a/src/uscxml/interpreter/BasicContentExecutor.h b/src/uscxml/interpreter/BasicContentExecutor.h index c3549f6..14f7881 100644 --- a/src/uscxml/interpreter/BasicContentExecutor.h +++ b/src/uscxml/interpreter/BasicContentExecutor.h @@ -35,6 +35,8 @@ public: BasicContentExecutor(ContentExecutorCallbacks* callbacks) : ContentExecutorImpl(callbacks) {} virtual ~BasicContentExecutor() {} + virtual std::shared_ptr<ContentExecutorImpl> create(ContentExecutorCallbacks* callbacks); + void processRaise(XERCESC_NS::DOMElement* content); void processSend(XERCESC_NS::DOMElement* element); void processCancel(XERCESC_NS::DOMElement* content); diff --git a/src/uscxml/interpreter/BasicEventQueue.cpp b/src/uscxml/interpreter/BasicEventQueue.cpp index cc5ff04..78b2321 100644 --- a/src/uscxml/interpreter/BasicEventQueue.cpp +++ b/src/uscxml/interpreter/BasicEventQueue.cpp @@ -65,6 +65,10 @@ void BasicEventQueue::reset() { _queue.clear(); } +std::shared_ptr<EventQueueImpl> BasicEventQueue::create() { + return std::shared_ptr<EventQueueImpl>(new BasicEventQueue()); +} + static void dummyCallback(evutil_socket_t fd, short what, void *arg) { timeval tv; tv.tv_sec = 365 * 24 * 3600; @@ -102,6 +106,10 @@ BasicDelayedEventQueue::~BasicDelayedEventQueue() { event_base_free(_eventLoop); } +std::shared_ptr<DelayedEventQueueImpl> BasicDelayedEventQueue::create(DelayedEventQueueCallbacks* callbacks) { + return std::shared_ptr<DelayedEventQueueImpl>(new BasicDelayedEventQueue(_callbacks)); +} + void BasicDelayedEventQueue::timerCallback(evutil_socket_t fd, short what, void *arg) { struct callbackData *data = (struct callbackData*)arg; std::lock_guard<std::recursive_mutex> lock(data->eventQueue->_mutex); @@ -203,4 +211,4 @@ void BasicDelayedEventQueue::reset() { _queue.clear(); } -}
\ No newline at end of file +} diff --git a/src/uscxml/interpreter/BasicEventQueue.h b/src/uscxml/interpreter/BasicEventQueue.h index 2bc739e..5911336 100644 --- a/src/uscxml/interpreter/BasicEventQueue.h +++ b/src/uscxml/interpreter/BasicEventQueue.h @@ -41,6 +41,7 @@ class USCXML_API BasicEventQueue : public EventQueueImpl { public: BasicEventQueue(); virtual ~BasicEventQueue(); + virtual std::shared_ptr<EventQueueImpl> create(); virtual Event dequeue(size_t blockMs); virtual void enqueue(const Event& event); virtual void reset(); @@ -59,6 +60,7 @@ class USCXML_API BasicDelayedEventQueue : public BasicEventQueue, public Delayed public: BasicDelayedEventQueue(DelayedEventQueueCallbacks* callbacks); virtual ~BasicDelayedEventQueue(); + virtual std::shared_ptr<DelayedEventQueueImpl> create(DelayedEventQueueCallbacks* callbacks); virtual void enqueueDelayed(const Event& event, size_t delayMs, const std::string& eventUUID); virtual void cancelDelayed(const std::string& eventId); virtual void cancelAllDelayed(); @@ -71,6 +73,11 @@ public: virtual void reset(); protected: + virtual std::shared_ptr<EventQueueImpl> create() { + ErrorEvent e("Cannot create a DelayedEventQueue without callbacks"); + throw e; + } + struct callbackData { Event userData; std::string eventUUID; diff --git a/src/uscxml/interpreter/ContentExecutor.cpp b/src/uscxml/interpreter/ContentExecutor.cpp index e26d66a..aa623b6 100644 --- a/src/uscxml/interpreter/ContentExecutor.cpp +++ b/src/uscxml/interpreter/ContentExecutor.cpp @@ -43,4 +43,8 @@ void ContentExecutor::raiseDoneEvent(XERCESC_NS::DOMElement* state, XERCESC_NS:: return _impl->raiseDoneEvent(state, doneData); } +std::shared_ptr<ContentExecutorImpl> ContentExecutor::getImpl() const { + return _impl; +} + } diff --git a/src/uscxml/interpreter/ContentExecutor.h b/src/uscxml/interpreter/ContentExecutor.h index be0de78..e17d8dc 100644 --- a/src/uscxml/interpreter/ContentExecutor.h +++ b/src/uscxml/interpreter/ContentExecutor.h @@ -49,7 +49,8 @@ public: virtual void uninvoke(XERCESC_NS::DOMElement* invoke); virtual Data elementAsData(XERCESC_NS::DOMElement* element); virtual void raiseDoneEvent(XERCESC_NS::DOMElement* state, XERCESC_NS::DOMElement* doneData); - + virtual std::shared_ptr<ContentExecutorImpl> getImpl() const; + protected: std::shared_ptr<ContentExecutorImpl> _impl; }; diff --git a/src/uscxml/interpreter/ContentExecutorImpl.h b/src/uscxml/interpreter/ContentExecutorImpl.h index ca565f0..2cf8566 100644 --- a/src/uscxml/interpreter/ContentExecutorImpl.h +++ b/src/uscxml/interpreter/ContentExecutorImpl.h @@ -78,6 +78,8 @@ class USCXML_API ContentExecutorImpl { public: ContentExecutorImpl(ContentExecutorCallbacks* callbacks) : _callbacks(callbacks) {} + virtual std::shared_ptr<ContentExecutorImpl> create(ContentExecutorCallbacks* callbacks) = 0; + virtual void process(XERCESC_NS::DOMElement* block, const X& xmlPrefix) = 0; virtual void invoke(XERCESC_NS::DOMElement* invoke) = 0; diff --git a/src/uscxml/interpreter/EventQueue.cpp b/src/uscxml/interpreter/EventQueue.cpp index dd83f38..ab199b4 100644 --- a/src/uscxml/interpreter/EventQueue.cpp +++ b/src/uscxml/interpreter/EventQueue.cpp @@ -42,6 +42,12 @@ void EventQueue::reset() { return _impl->reset(); } +std::shared_ptr<EventQueueImpl> EventQueue::getImplBase() { + return _impl; +} + + + PIMPL_OPERATORS_INHERIT_IMPL(DelayedEventQueue, EventQueue) void DelayedEventQueue::enqueueDelayed(const Event& event, size_t delayMs, const std::string& eventUUID) { @@ -55,5 +61,9 @@ void DelayedEventQueue::cancelAllDelayed() { return _impl->cancelAllDelayed(); } +std::shared_ptr<DelayedEventQueueImpl> DelayedEventQueue::getImplDelayed() { + return _impl; +} + } diff --git a/src/uscxml/interpreter/EventQueue.h b/src/uscxml/interpreter/EventQueue.h index 79d0c26..7356b23 100644 --- a/src/uscxml/interpreter/EventQueue.h +++ b/src/uscxml/interpreter/EventQueue.h @@ -39,6 +39,7 @@ public: virtual Event dequeue(size_t blockMs); virtual void enqueue(const Event& event); virtual void reset(); + virtual std::shared_ptr<EventQueueImpl> getImplBase(); protected: std::shared_ptr<EventQueueImpl> _impl; @@ -56,7 +57,8 @@ public: void enqueueDelayed(const Event& event, size_t delayMs, const std::string& eventUUID); void cancelDelayed(const std::string& eventUUID); void cancelAllDelayed(); - + virtual std::shared_ptr<DelayedEventQueueImpl> getImplDelayed(); + protected: std::shared_ptr<DelayedEventQueueImpl> _impl; }; diff --git a/src/uscxml/interpreter/EventQueueImpl.h b/src/uscxml/interpreter/EventQueueImpl.h index 1f99226..4420c24 100644 --- a/src/uscxml/interpreter/EventQueueImpl.h +++ b/src/uscxml/interpreter/EventQueueImpl.h @@ -40,6 +40,7 @@ namespace uscxml { */ class USCXML_API EventQueueImpl { public: + virtual std::shared_ptr<EventQueueImpl> create() = 0; virtual Event dequeue(size_t blockMs) = 0; virtual void enqueue(const Event& event) = 0; virtual void reset() = 0; @@ -60,6 +61,7 @@ public: */ class USCXML_API DelayedEventQueueImpl : public EventQueueImpl { public: + virtual std::shared_ptr<DelayedEventQueueImpl> create(DelayedEventQueueCallbacks*) = 0; virtual void enqueueDelayed(const Event& event, size_t delayMs, const std::string& eventUUID) = 0; virtual void cancelDelayed(const std::string& eventId) = 0; virtual void cancelAllDelayed() = 0; diff --git a/src/uscxml/interpreter/FastMicroStep.cpp b/src/uscxml/interpreter/FastMicroStep.cpp index b0fda1f..90b93ee 100644 --- a/src/uscxml/interpreter/FastMicroStep.cpp +++ b/src/uscxml/interpreter/FastMicroStep.cpp @@ -89,6 +89,10 @@ FastMicroStep::~FastMicroStep() { } } +std::shared_ptr<MicroStepImpl> FastMicroStep::create(MicroStepCallbacks* callbacks) { + return std::shared_ptr<MicroStepImpl>(new FastMicroStep(callbacks)); +} + void FastMicroStep::resortStates(DOMElement* element, const X& xmlPrefix) { /** @@ -1189,4 +1193,4 @@ bool FastMicroStep::hasLegalConfiguration() { } #endif -}
\ No newline at end of file +} diff --git a/src/uscxml/interpreter/FastMicroStep.h b/src/uscxml/interpreter/FastMicroStep.h index 1fbc8f4..faf5f45 100644 --- a/src/uscxml/interpreter/FastMicroStep.h +++ b/src/uscxml/interpreter/FastMicroStep.h @@ -43,6 +43,7 @@ class FastMicroStep : public MicroStepImpl { public: FastMicroStep(MicroStepCallbacks* callbacks); virtual ~FastMicroStep(); + virtual std::shared_ptr<MicroStepImpl> create(MicroStepCallbacks* callbacks); virtual InterpreterState step(size_t blockMs); virtual void reset(); diff --git a/src/uscxml/interpreter/MicroStep.cpp b/src/uscxml/interpreter/MicroStep.cpp index 2876be5..35e5d94 100644 --- a/src/uscxml/interpreter/MicroStep.cpp +++ b/src/uscxml/interpreter/MicroStep.cpp @@ -44,4 +44,7 @@ void MicroStep::markAsCancelled() { _impl->markAsCancelled(); } -}
\ No newline at end of file +std::shared_ptr<MicroStepImpl> MicroStep::getImpl() const { + return _impl; +} +} diff --git a/src/uscxml/interpreter/MicroStep.h b/src/uscxml/interpreter/MicroStep.h index a8ea4f0..341be2e 100644 --- a/src/uscxml/interpreter/MicroStep.h +++ b/src/uscxml/interpreter/MicroStep.h @@ -57,6 +57,7 @@ public: virtual void init(XERCESC_NS::DOMElement* scxml); virtual void markAsCancelled(); + std::shared_ptr<MicroStepImpl> getImpl() const; protected: std::shared_ptr<MicroStepImpl> _impl; }; diff --git a/src/uscxml/interpreter/MicroStepImpl.h b/src/uscxml/interpreter/MicroStepImpl.h index 7d7c9b0..d831fdd 100644 --- a/src/uscxml/interpreter/MicroStepImpl.h +++ b/src/uscxml/interpreter/MicroStepImpl.h @@ -76,7 +76,8 @@ public: }; MicroStepImpl(MicroStepCallbacks* callbacks) : _callbacks(callbacks) {} - + virtual std::shared_ptr<MicroStepImpl> create(MicroStepCallbacks* callbacks) = 0; + virtual InterpreterState step(size_t blockMs) = 0; virtual void reset() = 0; ///< Reset state machine virtual bool isInState(const std::string& stateId) = 0; |