Skip to content

Commit

Permalink
time-series-api: implement nonrecursive ast visitors
Browse files Browse the repository at this point in the history
Signed-off-by: Jon Harper <[email protected]>
  • Loading branch information
jonenst authored and niconoir committed Sep 2, 2019
1 parent d42f4f7 commit dbf682d
Show file tree
Hide file tree
Showing 24 changed files with 469 additions and 84 deletions.
4 changes: 4 additions & 0 deletions time-series/time-series-api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@

import java.io.IOException;
import java.math.BigDecimal;
import java.util.Collections;
import java.util.List;
import java.util.Objects;

/**
Expand All @@ -34,10 +36,15 @@ public double toDouble() {
}

@Override
public <R, A> R accept(NodeCalcVisitor<R, A> visitor, A arg) {
public <R, A> R acceptVisit(NodeCalcVisitor<R, A> visitor, A arg, List<R> children) {
return visitor.visit(this, arg);
}

@Override
public <R, A> List<NodeCalc> acceptIterate(NodeCalcVisitor<R, A> visitor, A arg) {
return Collections.emptyList();
}

public BigDecimal getValue() {
return value;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,11 @@
import com.fasterxml.jackson.core.JsonToken;
import com.powsybl.timeseries.TimeSeriesException;

import org.apache.commons.lang3.tuple.Pair;

import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;

/**
Expand Down Expand Up @@ -118,8 +122,14 @@ public void setRight(NodeCalc right) {
}

@Override
public <R, A> R accept(NodeCalcVisitor<R, A> visitor, A arg) {
return visitor.visit(this, arg);
public <R, A> R acceptVisit(NodeCalcVisitor<R, A> visitor, A arg, List<R> children) {
return visitor.visit(this, arg, children.get(0), children.get(1));
}

@Override
public <R, A> List<NodeCalc> acceptIterate(NodeCalcVisitor<R, A> visitor, A arg) {
Pair<NodeCalc, NodeCalc> p = visitor.iterate(this, arg);
return Arrays.asList(p.getLeft(), p.getRight());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
*/
package com.powsybl.timeseries.ast;

import org.apache.commons.lang3.tuple.Pair;

/**
* @author Geoffroy Jamgotchian <geoffroy.jamgotchian at rte-france.com>
*/
Expand All @@ -31,36 +33,55 @@ public R visit(BigDecimalNodeCalc nodeCalc, A arg) {
}

@Override
public R visit(BinaryOperation nodeCalc, A arg) {
nodeCalc.getLeft().accept(this, arg);
nodeCalc.getRight().accept(this, arg);
public R visit(BinaryOperation nodeCalc, A arg, R left, R right) {
return null;
}

@Override
public R visit(UnaryOperation nodeCalc, A arg) {
nodeCalc.getChild().accept(this, arg);
public Pair<NodeCalc, NodeCalc> iterate(BinaryOperation nodeCalc, A arg) {
return Pair.of(nodeCalc.getLeft(), nodeCalc.getRight());
}

@Override
public R visit(UnaryOperation nodeCalc, A arg, R child) {
return null;
}

@Override
public R visit(MinNodeCalc nodeCalc, A arg) {
nodeCalc.getChild().accept(this, arg);
public NodeCalc iterate(UnaryOperation nodeCalc, A arg) {
return nodeCalc.getChild();
}

@Override
public R visit(MinNodeCalc nodeCalc, A arg, R child) {
return null;
}

@Override
public R visit(MaxNodeCalc nodeCalc, A arg) {
nodeCalc.getChild().accept(this, arg);
public NodeCalc iterate(MinNodeCalc nodeCalc, A arg) {
return nodeCalc.getChild();
}

@Override
public R visit(MaxNodeCalc nodeCalc, A arg, R child) {
return null;
}

@Override
public R visit(TimeNodeCalc nodeCalc, A arg) {
nodeCalc.getChild().accept(this, arg);
public NodeCalc iterate(MaxNodeCalc nodeCalc, A arg) {
return nodeCalc.getChild();
}

@Override
public R visit(TimeNodeCalc nodeCalc, A arg, R child) {
return null;
}

@Override
public NodeCalc iterate(TimeNodeCalc nodeCalc, A arg) {
return nodeCalc.getChild();
}

@Override
public R visit(TimeSeriesNameNodeCalc nodeCalc, A arg) {
return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import com.powsybl.timeseries.TimeSeriesException;

import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Objects;

/**
Expand All @@ -35,10 +37,15 @@ public double toDouble() {
}

@Override
public <R, A> R accept(NodeCalcVisitor<R, A> visitor, A arg) {
public <R, A> R acceptVisit(NodeCalcVisitor<R, A> visitor, A arg, List<R> children) {
return visitor.visit(this, arg);
}

@Override
public <R, A> List<NodeCalc> acceptIterate(NodeCalcVisitor<R, A> visitor, A arg) {
return Collections.emptyList();
}

public double getValue() {
return value;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import com.powsybl.timeseries.TimeSeriesException;

import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Objects;

/**
Expand All @@ -33,10 +35,15 @@ public double toDouble() {
}

@Override
public <R, A> R accept(NodeCalcVisitor<R, A> visitor, A arg) {
public <R, A> R acceptVisit(NodeCalcVisitor<R, A> visitor, A arg, List<R> children) {
return visitor.visit(this, arg);
}

@Override
public <R, A> List<NodeCalc> acceptIterate(NodeCalcVisitor<R, A> visitor, A arg) {
return Collections.emptyList();
}

public float getValue() {
return value;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import com.powsybl.timeseries.TimeSeriesException;

import java.io.IOException;
import java.util.Collections;
import java.util.List;
import java.util.Objects;

/**
Expand All @@ -33,10 +35,15 @@ public double toDouble() {
}

@Override
public <R, A> R accept(NodeCalcVisitor<R, A> visitor, A arg) {
public <R, A> R acceptVisit(NodeCalcVisitor<R, A> visitor, A arg, List<R> children) {
return visitor.visit(this, arg);
}

@Override
public <R, A> List<NodeCalc> acceptIterate(NodeCalcVisitor<R, A> visitor, A arg) {
return Collections.emptyList();
}

public int getValue() {
return value;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
import com.fasterxml.jackson.core.JsonParser;

import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;

/**
Expand All @@ -27,8 +29,13 @@ public double getMax() {
}

@Override
public <R, A> R accept(NodeCalcVisitor<R, A> visitor, A arg) {
return visitor.visit(this, arg);
public <R, A> R acceptVisit(NodeCalcVisitor<R, A> visitor, A arg, List<R> children) {
return visitor.visit(this, arg, children.get(0));
}

@Override
public <R, A> List<NodeCalc> acceptIterate(NodeCalcVisitor<R, A> visitor, A arg) {
return Arrays.asList(visitor.iterate(this, arg));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
import com.fasterxml.jackson.core.JsonParser;

import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;

/**
Expand All @@ -27,8 +29,13 @@ public double getMin() {
}

@Override
public <R, A> R accept(NodeCalcVisitor<R, A> visitor, A arg) {
return visitor.visit(this, arg);
public <R, A> R acceptVisit(NodeCalcVisitor<R, A> visitor, A arg, List<R> children) {
return visitor.visit(this, arg, children.get(0));
}

@Override
public <R, A> List<NodeCalc> acceptIterate(NodeCalcVisitor<R, A> visitor, A arg) {
return Arrays.asList(visitor.iterate(this, arg));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,17 @@

import java.io.IOException;
import java.io.UncheckedIOException;
import java.util.List;
import java.util.Objects;

/**
* @author Geoffroy Jamgotchian <geoffroy.jamgotchian at rte-france.com>
*/
public interface NodeCalc {

<R, A> R accept(NodeCalcVisitor<R, A> visitor, A arg);
<R, A> List<NodeCalc> acceptIterate(NodeCalcVisitor<R, A> visitor, A arg);

<R, A> R acceptVisit(NodeCalcVisitor<R, A> visitor, A arg, List<R> children);

void writeJson(JsonGenerator generator) throws IOException;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
*/
package com.powsybl.timeseries.ast;

import org.apache.commons.lang3.tuple.Pair;

/**
* @author Geoffroy Jamgotchian <geoffroy.jamgotchian at rte-france.com>
*/
Expand All @@ -31,30 +33,53 @@ public NodeCalc visit(BigDecimalNodeCalc nodeCalc, A arg) {
}

@Override
public NodeCalc visit(BinaryOperation nodeCalc, A arg) {
return new BinaryOperation(nodeCalc.getLeft().accept(this, arg),
nodeCalc.getRight().accept(this, arg),
nodeCalc.getOperator());
public NodeCalc visit(BinaryOperation nodeCalc, A arg, NodeCalc left, NodeCalc right) {
return new BinaryOperation(left, right, nodeCalc.getOperator());
}

@Override
public Pair<NodeCalc, NodeCalc> iterate(BinaryOperation nodeCalc, A arg) {
return Pair.of(nodeCalc.getLeft(), nodeCalc.getRight());
}

@Override
public NodeCalc visit(UnaryOperation nodeCalc, A arg, NodeCalc child) {
return new UnaryOperation(child, nodeCalc.getOperator());
}

@Override
public NodeCalc iterate(UnaryOperation nodeCalc, A arg) {
return nodeCalc.getChild();
}

@Override
public NodeCalc visit(MinNodeCalc nodeCalc, A arg, NodeCalc child) {
return new MinNodeCalc(child, nodeCalc.getMin());
}

@Override
public NodeCalc iterate(MinNodeCalc nodeCalc, A arg) {
return nodeCalc.getChild();
}

@Override
public NodeCalc visit(UnaryOperation nodeCalc, A arg) {
return new UnaryOperation(nodeCalc.getChild().accept(this, arg), nodeCalc.getOperator());
public NodeCalc visit(MaxNodeCalc nodeCalc, A arg, NodeCalc child) {
return new MaxNodeCalc(child, nodeCalc.getMax());
}

@Override
public NodeCalc visit(MinNodeCalc nodeCalc, A arg) {
return new MinNodeCalc(nodeCalc.getChild().accept(this, arg), nodeCalc.getMin());
public NodeCalc iterate(MaxNodeCalc nodeCalc, A arg) {
return nodeCalc.getChild();
}

@Override
public NodeCalc visit(MaxNodeCalc nodeCalc, A arg) {
return new MaxNodeCalc(nodeCalc.getChild().accept(this, arg), nodeCalc.getMax());
public NodeCalc visit(TimeNodeCalc nodeCalc, A arg, NodeCalc child) {
return new TimeNodeCalc(child);
}

@Override
public NodeCalc visit(TimeNodeCalc nodeCalc, A arg) {
return new TimeNodeCalc(nodeCalc.getChild().accept(this, arg));
public NodeCalc iterate(TimeNodeCalc nodeCalc, A arg) {
return nodeCalc.getChild();
}

@Override
Expand Down
Loading

0 comments on commit dbf682d

Please sign in to comment.