Files
Upsilon/expression_reference.h
2018-06-22 15:12:19 +02:00

50 lines
1.4 KiB
C++

#ifndef EXPRESSION_REFERENCE_H
#define EXPRESSION_REFERENCE_H
#include "tree_reference.h"
#include "expression_node.h"
#include <stdio.h>
template <class T>
class ExpressionReference : public TreeReference<T> {
public:
ExpressionReference() : TreeReference<T>() { }
/*ExpressionReference(const ExpressionReference & er) {
}*/
// Allow every ExpressionReference<T> to be transformed into an ExpressionReference<ExpressionNode>, i.e. Expression
operator ExpressionReference<ExpressionNode>() const {
// TODO: make sure this is kosher
// static_assert(sizeof(ExpressionReference<T>) == sizeof(ExpressionReference<ExpressionNode>), "All ExpressionReference are supposed to have the same size");
return *(reinterpret_cast<const ExpressionReference<ExpressionNode> *>(this));
}
void addOperand(ExpressionReference<ExpressionNode> e) {
TreeReference<T>::addChild(e);
}
ExpressionReference<ExpressionNode> childAtIndex(int i) {
return TreeReference<T>::childAtIndex(i);
}
void replaceChildAtIndex(int oldChildIndex, ExpressionReference<ExpressionNode> newChild) {
TreeReference<T>::replaceChildAtIndex(oldChildIndex, newChild);
}
float approximate() const {
return this->node()->approximate();
}
/*
ExpressionReference<ExpressionNode> simplify() {
return node()->simplify();
}
*/
};
typedef ExpressionReference<ExpressionNode> Expression;
#endif