From 7e51bf3804e50ea063fcc97b2682a32a8505902f Mon Sep 17 00:00:00 2001 From: Andreas Stöckel Date: Fri, 24 Oct 2014 22:22:26 +0000 Subject: 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 --- src/core/script/Object.hpp | 132 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 src/core/script/Object.hpp (limited to 'src/core/script/Object.hpp') 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 . +*/ + +#ifndef _OBJECT_HPP_ +#define _OBJECT_HPP_ + +#include +#include + +#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 properties; + + /** + * Map used internally for storing all methods along with their + * corresponding name. + */ + std::map 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 &signature); + + const std::map &getProperties() + { + return properties; + } + + const std::map &getMethods() + { + return methods; + } +}; +} +} + +#endif /* _OBJECT_HPP_ */ + -- cgit v1.2.3