Skip to content
Snippets Groups Projects

procedural aql

Merged Jan Trávníček requested to merge merge-jt into master
2 files
+ 60
37
Compare changes
  • Side-by-side
  • Inline
Files
2
@@ -8,49 +8,16 @@
#ifndef _VALUE_HOLDER_INTERFACE_HPP_
#define _VALUE_HOLDER_INTERFACE_HPP_
#include <abstraction/Value.hpp>
#include <abstraction/ValueInterface.hpp>
namespace abstraction {
template < class Type >
class ValueHolderInterface : public Value {
ParamQualifiers::ParamQualifierSet m_paramQualifierSet;
bool m_isTemporary;
protected:
ValueHolderInterface ( ParamQualifiers::ParamQualifierSet paramQualifierSet, bool isTemporary ) : m_paramQualifierSet ( paramQualifierSet ), m_isTemporary ( isTemporary ) {
if ( this->isLvalueRef ( ) && this->isTemporary ( ) )
throw std::domain_error ( "Lvalue references cannot be a temporarie." );
if ( this->isLvalueRef ( ) && this->isRvalueRef ( ) )
throw std::domain_error ( "A reference cannot be both, rvalue and lvalue." );
}
class ValueHolderInterface : public ValueInterface {
public:
virtual Type && getValue ( ) const = 0;
ParamQualifiers::ParamQualifierSet getParamQualifiersSet ( ) const {
return m_paramQualifierSet;
}
bool isConst ( ) const {
return m_paramQualifierSet && ParamQualifiers::ParamQualifierSet::CONST;
}
using ValueInterface::ValueInterface;
bool isRef ( ) const {
return isRvalueRef ( ) || isLvalueRef ( );
}
bool isRvalueRef ( ) const {
return m_paramQualifierSet && ParamQualifiers::ParamQualifierSet::RREF;
}
bool isLvalueRef ( ) const {
return m_paramQualifierSet && ParamQualifiers::ParamQualifierSet::LREF;
}
bool isTemporary ( ) const {
return m_isTemporary;
}
virtual Type && getValue ( ) const = 0;
};
Loading