diff options
Diffstat (limited to 'project2/basics/tasks')
-rw-r--r-- | project2/basics/tasks/session/sessionClearTask.cpp | 26 | ||||
-rw-r--r-- | project2/basics/tasks/session/sessionClearTask.h | 25 | ||||
-rw-r--r-- | project2/basics/tasks/session/sessionSetTask.cpp | 27 | ||||
-rw-r--r-- | project2/basics/tasks/session/sessionSetTask.h | 27 | ||||
-rw-r--r-- | project2/basics/tasks/structExceptHandling.cpp | 44 | ||||
-rw-r--r-- | project2/basics/tasks/structExceptHandling.h | 18 |
6 files changed, 167 insertions, 0 deletions
diff --git a/project2/basics/tasks/session/sessionClearTask.cpp b/project2/basics/tasks/session/sessionClearTask.cpp new file mode 100644 index 0000000..265bb1c --- /dev/null +++ b/project2/basics/tasks/session/sessionClearTask.cpp @@ -0,0 +1,26 @@ +#include <pch.hpp> +#include <boost/foreach.hpp> +#include "scriptLoader.h" +#include "sessionClearTask.h" +#include "session.h" +#include "execContext.h" + +DECLARE_LOADER("sessionclear", SessionClearTask); + +SessionClearTask::SessionClearTask(ScriptNodePtr p) : + SourceObject(p), + Task(p), + key(p->value("key", NULL).as<Glib::ustring>()) +{ +} + +SessionClearTask::~SessionClearTask() +{ +} + +void +SessionClearTask::execute(ExecContext * ec) const +{ + ec->getSession()->ClearValue(key); +} + diff --git a/project2/basics/tasks/session/sessionClearTask.h b/project2/basics/tasks/session/sessionClearTask.h new file mode 100644 index 0000000..ead88bf --- /dev/null +++ b/project2/basics/tasks/session/sessionClearTask.h @@ -0,0 +1,25 @@ +#ifndef SESSIONCLEARTASK_H +#define SESSIONCLEARTASK_H + +#include <boost/intrusive_ptr.hpp> +#include <map> +#include "sourceObject.h" +#include "scriptLoader.h" +#include "task.h" + +class CommonObjects; + +/// Project2 component to remove a variable from the session +class SessionClearTask : public Task { + public: + SessionClearTask(ScriptNodePtr p); + virtual ~SessionClearTask(); + + void execute(ExecContext *) const; + + const Glib::ustring key; +}; + +#endif + + diff --git a/project2/basics/tasks/session/sessionSetTask.cpp b/project2/basics/tasks/session/sessionSetTask.cpp new file mode 100644 index 0000000..f46571b --- /dev/null +++ b/project2/basics/tasks/session/sessionSetTask.cpp @@ -0,0 +1,27 @@ +#include <pch.hpp> +#include <boost/foreach.hpp> +#include "scriptLoader.h" +#include "sessionSetTask.h" +#include "session.h" +#include "execContext.h" + +DECLARE_LOADER("sessionset", SessionSetTask); + +SessionSetTask::SessionSetTask(ScriptNodePtr p) : + SourceObject(p), + Task(p), + key(p->value("key", NULL).as<Glib::ustring>()), + value(p, "value") +{ +} + +SessionSetTask::~SessionSetTask() +{ +} + +void +SessionSetTask::execute(ExecContext * ec) const +{ + ec->getSession()->SetValue(key, value(ec)); +} + diff --git a/project2/basics/tasks/session/sessionSetTask.h b/project2/basics/tasks/session/sessionSetTask.h new file mode 100644 index 0000000..d38c216 --- /dev/null +++ b/project2/basics/tasks/session/sessionSetTask.h @@ -0,0 +1,27 @@ +#ifndef SESSIONSETTASK_H +#define SESSIONSETTASK_H + +#include <boost/intrusive_ptr.hpp> +#include <map> +#include "sourceObject.h" +#include "scriptLoader.h" +#include "task.h" +#include "variables.h" + +class CommonObjects; + +/// Project2 component to add/update a variable in the session +class SessionSetTask : public Task { + public: + SessionSetTask(ScriptNodePtr p); + virtual ~SessionSetTask(); + + void execute(ExecContext *) const; + + const Glib::ustring key; + const Variable value; +}; + +#endif + + diff --git a/project2/basics/tasks/structExceptHandling.cpp b/project2/basics/tasks/structExceptHandling.cpp new file mode 100644 index 0000000..917f030 --- /dev/null +++ b/project2/basics/tasks/structExceptHandling.cpp @@ -0,0 +1,44 @@ +#include <pch.hpp> +#include "structExceptHandling.h" +#include "scriptLoader.h" +#include "scriptStorage.h" +#include "scripts.h" +#include <boost/foreach.hpp> + +DECLARE_LOADER("handler", StructuredExceptionHandler); + +StructuredExceptionHandler::StructuredExceptionHandler(ScriptNodePtr e) : + SourceObject(e), + IHaveSubTasks(e) +{ + e->script->loader.addLoadTargetSub(e, "try", true, Storer::into<ElementLoader>(&normal)); + e->script->loader.addLoadTargetSub(e, "catch", false, Storer::into<ElementLoader>(&catches)); + e->script->loader.addLoadTargetSub(e, "finally", false, Storer::into<ElementLoader>(&finallies)); +} + +void +StructuredExceptionHandler::loadComplete(const CommonObjects * co) +{ + IHaveSubTasks::loadComplete(co); +} + +void +StructuredExceptionHandler::execute(ExecContext * ec) const +{ + try { + run(normal, ec); + } + catch (...) { + try { + run(catches, ec); + run(finallies, ec); + return; + } + catch (...) { + } + run(finallies, ec); + throw; + } + run(finallies, ec); +} + diff --git a/project2/basics/tasks/structExceptHandling.h b/project2/basics/tasks/structExceptHandling.h new file mode 100644 index 0000000..b6702f1 --- /dev/null +++ b/project2/basics/tasks/structExceptHandling.h @@ -0,0 +1,18 @@ +#ifndef STRUCTUREDEXCEPTIONHANDLER_H +#define STRUCTUREDEXCEPTIONHANDLER_H + +#include "iHaveSubTasks.h" + +class StructuredExceptionHandler : public IHaveSubTasks { + public: + StructuredExceptionHandler(ScriptNodePtr); + + void loadComplete(const CommonObjects*); + void execute(ExecContext * ec) const; + + private: + Tasks catches, finallies; +}; + +#endif + |