mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-03-24 00:00:44 +01:00
50 lines
1.4 KiB
C++
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
|