/*
This file is part of Ingen.
Copyright 2007-2012 David Robillard
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 .
*/
#ifndef INGEN_INTERFACE_PORTTYPE_HPP
#define INGEN_INTERFACE_PORTTYPE_HPP
#include
#include "raul/URI.hpp"
#include "lv2/lv2plug.in/ns/ext/atom/atom.h"
#include "lv2/lv2plug.in/ns/lv2core/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 Symbol {
UNKNOWN = 0,
AUDIO = 1,
CONTROL = 2,
CV = 3,
ATOM = 4
};
explicit PortType(const Raul::URI& uri)
: _symbol(UNKNOWN)
{
if (uri == type_uri(AUDIO)) {
_symbol = AUDIO;
} else if (uri == type_uri(CONTROL)) {
_symbol = CONTROL;
} else if (uri == type_uri(CV)) {
_symbol = CV;
} else if (uri == type_uri(ATOM)) {
_symbol = ATOM;
}
}
PortType(Symbol symbol)
: _symbol(symbol)
{}
inline const Raul::URI& uri() const { return type_uri(_symbol); }
inline Symbol symbol() const { return _symbol; }
inline bool operator==(const Symbol& symbol) const { return (_symbol == symbol); }
inline bool operator!=(const Symbol& symbol) const { return (_symbol != symbol); }
inline bool operator==(const PortType& type) const { return (_symbol == type._symbol); }
inline bool operator!=(const PortType& type) const { return (_symbol != type._symbol); }
inline bool operator<(const PortType& type) const { return (_symbol < type._symbol); }
inline bool is_audio() { return _symbol == AUDIO; }
inline bool is_control() { return _symbol == CONTROL; }
inline bool is_cv() { return _symbol == CV; }
inline bool is_atom() { return _symbol == ATOM; }
private:
static inline const Raul::URI& type_uri(unsigned symbol_num) {
assert(symbol_num <= ATOM);
static const Raul::URI uris[] = {
"http://drobilla.net/ns/ingen#nil",
LV2_CORE__AudioPort,
LV2_CORE__ControlPort,
LV2_CORE__CVPort,
LV2_ATOM__AtomPort
};
return uris[symbol_num];
}
Symbol _symbol;
};
} // namespace Ingen
#endif // INGEN_INTERFACE_PORTTYPE_HPP