Added back reference expressions to make the expression tree structure simpler.
This commit is contained in:
parent
da88a8816c
commit
f10f4ac29c
@ -62,6 +62,11 @@ class PrimitiveType;
|
|||||||
using PrimitiveTypePointer = std::unique_ptr<PrimitiveType>;
|
using PrimitiveTypePointer = std::unique_ptr<PrimitiveType>;
|
||||||
using PrimitiveTypes = std::vector<PrimitiveTypePointer>;
|
using PrimitiveTypes = std::vector<PrimitiveTypePointer>;
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
class Reference;
|
||||||
|
template<class Type>
|
||||||
|
using ReferencePointer = std::unique_ptr<Reference<Type>>;
|
||||||
|
|
||||||
class Unsupported;
|
class Unsupported;
|
||||||
using UnsupportedPointer = std::unique_ptr<Unsupported>;
|
using UnsupportedPointer = std::unique_ptr<Unsupported>;
|
||||||
|
|
||||||
@ -89,6 +94,7 @@ class Expression
|
|||||||
PredicateDeclaration,
|
PredicateDeclaration,
|
||||||
Predicate,
|
Predicate,
|
||||||
PrimitiveType,
|
PrimitiveType,
|
||||||
|
Reference,
|
||||||
Unsupported,
|
Unsupported,
|
||||||
Variable,
|
Variable,
|
||||||
};
|
};
|
||||||
|
75
include/plasp/pddl/expressions/Reference.h
Normal file
75
include/plasp/pddl/expressions/Reference.h
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
#ifndef __PLASP__PDDL__EXPRESSIONS__REFERENCE_H
|
||||||
|
#define __PLASP__PDDL__EXPRESSIONS__REFERENCE_H
|
||||||
|
|
||||||
|
#include <plasp/pddl/Expression.h>
|
||||||
|
|
||||||
|
namespace plasp
|
||||||
|
{
|
||||||
|
namespace pddl
|
||||||
|
{
|
||||||
|
namespace expressions
|
||||||
|
{
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Reference
|
||||||
|
//
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
class Reference: public ExpressionCRTP<Reference<Type>>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static const Expression::Type ExpressionType = Expression::Type::Reference;
|
||||||
|
|
||||||
|
public:
|
||||||
|
Reference(Type *value);
|
||||||
|
|
||||||
|
Type *get();
|
||||||
|
const Type *get() const;
|
||||||
|
|
||||||
|
ExpressionPointer normalize();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
Type *m_value = nullptr;
|
||||||
|
};
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Reference<Type>::Reference(Type *value)
|
||||||
|
: m_value{value}
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
Type *Reference<Type>::get()
|
||||||
|
{
|
||||||
|
return m_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
const Type *Reference<Type>::get() const
|
||||||
|
{
|
||||||
|
return m_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
template<class Type>
|
||||||
|
ExpressionPointer Reference<Type>::normalize()
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
Reference in New Issue
Block a user