diff options
Diffstat (limited to 'src/server/PortType.hpp')
-rw-r--r-- | src/server/PortType.hpp | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/src/server/PortType.hpp b/src/server/PortType.hpp new file mode 100644 index 00000000..d5fd0238 --- /dev/null +++ b/src/server/PortType.hpp @@ -0,0 +1,91 @@ +/* + This file is part of Ingen. + Copyright 2007-2015 David Robillard <http://drobilla.net/> + + Ingen is free software: you can redistribute it and/or modify it under the + terms of the GNU Affero General Public License as published by the Free + Software Foundation, either version 3 of the License, or any later version. + + Ingen 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 Affero General Public License for details. + + You should have received a copy of the GNU Affero General Public License + along with Ingen. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef INGEN_INTERFACE_PORTTYPE_HPP +#define INGEN_INTERFACE_PORTTYPE_HPP + +#include <cassert> + +#include "lv2/atom/atom.h" +#include "lv2/core/lv2.h" + +namespace ingen { + +/** The type of a port. + * + * This type refers to the type of the port itself (not necessarily the type + * of its contents). Ports with different types can contain the same type of + * data, but may e.g. have different access semantics. + */ +class PortType { +public: + enum ID { + UNKNOWN = 0, + AUDIO = 1, + CONTROL = 2, + CV = 3, + ATOM = 4 + }; + + explicit PortType(const URI& uri) + : _id(UNKNOWN) + { + if (uri == type_uri(AUDIO)) { + _id = AUDIO; + } else if (uri == type_uri(CONTROL)) { + _id = CONTROL; + } else if (uri == type_uri(CV)) { + _id = CV; + } else if (uri == type_uri(ATOM)) { + _id = ATOM; + } + } + + PortType(ID id) : _id(id) {} + + inline const URI& uri() const { return type_uri(_id); } + inline ID id() const { return _id; } + + inline bool operator==(const ID& id) const { return (_id == id); } + inline bool operator!=(const ID& id) const { return (_id != id); } + inline bool operator==(const PortType& type) const { return (_id == type._id); } + inline bool operator!=(const PortType& type) const { return (_id != type._id); } + inline bool operator<(const PortType& type) const { return (_id < type._id); } + + inline bool is_audio() { return _id == AUDIO; } + inline bool is_control() { return _id == CONTROL; } + inline bool is_cv() { return _id == CV; } + inline bool is_atom() { return _id == ATOM; } + +private: + static inline const URI& type_uri(unsigned id_num) { + assert(id_num <= ATOM); + static const URI uris[] = { + URI("http://www.w3.org/2002/07/owl#Nothing"), + URI(LV2_CORE__AudioPort), + URI(LV2_CORE__ControlPort), + URI(LV2_CORE__CVPort), + URI(LV2_ATOM__AtomPort) + }; + return uris[id_num]; + } + + ID _id; +}; + +} // namespace ingen + +#endif // INGEN_INTERFACE_PORTTYPE_HPP |