summaryrefslogtreecommitdiff
path: root/src/core/script/Object.hpp
diff options
context:
space:
mode:
authorAndreas Stöckel <astoecke@techfak.uni-bielefeld.de>2014-10-24 22:22:26 +0000
committerandreas <andreas@daaaf23c-2e50-4459-9457-1e69db5a47bf>2014-10-24 22:22:26 +0000
commit7e51bf3804e50ea063fcc97b2682a32a8505902f (patch)
tree6a6097216708049b5dd7a4c43020c85aafb046a1 /src/core/script/Object.hpp
parent4a9912f516bf096c6f8c6259b3fc6ba4b95b8d69 (diff)
added Function, Property and Object classes; added CMakeLists entries for the mozjs-24 library (the Firefox JavaScript engine which is available as Package on Fedora); added Doxygen target to makefile
git-svn-id: file:///var/local/svn/basicwriter@75 daaaf23c-2e50-4459-9457-1e69db5a47bf
Diffstat (limited to 'src/core/script/Object.hpp')
-rw-r--r--src/core/script/Object.hpp132
1 files changed, 132 insertions, 0 deletions
diff --git a/src/core/script/Object.hpp b/src/core/script/Object.hpp
new file mode 100644
index 0000000..20e0f0f
--- /dev/null
+++ b/src/core/script/Object.hpp
@@ -0,0 +1,132 @@
+/*
+ Ousía
+ Copyright (C) 2014, 2015 Benjamin Paaßen, Andreas Stöckel
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _OBJECT_HPP_
+#define _OBJECT_HPP_
+
+#include <string>
+#include <map>
+
+#include "Function.hpp"
+
+namespace ousia {
+namespace script {
+
+/**
+ * The Property struct represents an object property with corresponding getter
+ * and setter function.
+ */
+struct Property {
+ /**
+ * Constructor of the Property struct. Copies the given getter and setter.
+ *
+ * @param get is the getter that should be used for the property.
+ * @param set is the setter that should be used for the property.
+ */
+ Property(const Getter &get, const Setter &set) : get(get), set(set){};
+
+ /**
+ * Constructor of the Property struct. Creates new Getter and Setter
+ * instances from the given parameters.
+ *
+ * @param type is the VariantType used within the getter function.
+ * @param get is the pointer to the getter function.
+ * @param set is the pointer to the setter function.
+ * @param data is the used-defined data that should be used.
+ */
+ Property(VariantType type, const GetterCallback get,
+ const SetterCallback set, void *data = nullptr)
+ : get(get, data), set(type, set, data){};
+
+ /**
+ * Getter function.
+ */
+ const Getter get;
+
+ /**
+ * Setter function.
+ */
+ const Setter set;
+};
+
+/**
+ * The Object type represents an object on the script host. An object consits of
+ * properties with corresponding getter and setter functions and a number of
+ * methods which can be called on the object.
+ */
+class Object {
+private:
+ /**
+ * Pointer to user defined data that is automatically passed to the
+ * underlying functions.
+ */
+ void *data;
+
+ /**
+ * Map used internally for storing all properties along with their
+ * corresponding
+ * name.
+ */
+ std::map<std::string, Property> properties;
+
+ /**
+ * Map used internally for storing all methods along with their
+ * corresponding name.
+ */
+ std::map<std::string, HostFunction> methods;
+
+public:
+ Object() : data(nullptr){};
+
+ Object(void *data) : data(data){};
+
+ bool hasElement(std::string name) const;
+
+ void addProperty(std::string name, const Property &property);
+
+ void addProperty(std::string name, const Getter &get, const Setter &set);
+
+ void addProperty(std::string name, VariantType type,
+ const GetterCallback get, const SetterCallback set);
+
+ void addReadonlyProperty(std::string name, const Getter &get);
+
+ void addReadonlyProperty(std::string name, const GetterCallback get);
+
+ void addMethod(std::string name, const HostFunction &fun);
+
+ void addMethod(std::string name, const HostFunctionCallback fun);
+
+ void addMethod(std::string name, const HostFunctionCallback fun,
+ const std::vector<Argument> &signature);
+
+ const std::map<std::string, Property> &getProperties()
+ {
+ return properties;
+ }
+
+ const std::map<std::string, HostFunction> &getMethods()
+ {
+ return methods;
+ }
+};
+}
+}
+
+#endif /* _OBJECT_HPP_ */
+