diff options
Diffstat (limited to 'src/core/dom')
| -rw-r--r-- | src/core/dom/Typesystem.hpp | 87 | 
1 files changed, 87 insertions, 0 deletions
diff --git a/src/core/dom/Typesystem.hpp b/src/core/dom/Typesystem.hpp new file mode 100644 index 0000000..201aed2 --- /dev/null +++ b/src/core/dom/Typesystem.hpp @@ -0,0 +1,87 @@ +/* +    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 _OUSIA_DOM_TYPESYSTEM_HPP_ +#define _OUSIA_DOM_TYPESYSTEM_HPP_ + +#include <string> +#include <vector> + +#include <core/Managed.hpp> + +#include "Node.hpp" + +namespace ousia { +namespace dom { + +class Type; + +class TypeInstance : public Managed { +public: +	const Owned<Type> type; + +	TypeInstance(Manager &mgr, Handle<Type> type) +	    : Managed(mgr), type(acquire(type)) +	{ +	} +}; + +class Type : public Node { +public: +	using Node::Node; + +	virtual bool isFinal() const { return true; } + +	virtual bool isPrimitive() const { return true; } + +	virtual Rooted<TypeInstance> create() = 0; + +	virtual Rooted<TypeInstance> parse(const std::string &str) = 0; +}; + +class Typesystem : public Node { +private: +	const std::vector<Owned<Type>> types; +	const std::vector<Owned<TypeInstance>> constants; + +protected: +	void doResolve(std::vector<Rooted<Node>> &res, +	               const std::vector<std::string> &path, Filter filter, +	               void *filterData, unsigned idx, +	               VisitorSet &visited) override; + +public: +	using Node::Node; + +	const &std::vector<Owned<Type>> getTypes() { return types; } + +	const &std::vector<Owned<TypeInstance>> getConstants() { return constants; } + +	void addType(Handle<Type> type) { +		types.push_back(acquire(type)); +	} + +	void addConstant(Handle<TypeInstance> ) { +		 +	} +}; +} +} + +#endif /* _OUSIA_DOM_TYPESYSTEM_HPP_ */ +  | 
