--- /dev/null
+package ofc.codegen
+
+class ArrayRange private(name: String, count: Expression, statements: List[Statement]) extends Statement {
+ val index = UniqueUnboundVarSymbol(name)
+
+ def getIndex = index
+ def this(name: String, start: Expression, count: Expression) = this(name, start, count, List.empty)
+ def +(stat: Statement) = new ArrayRange(name, start, count, statements :+ stat)
+}
package ofc.codegen
-trait Expression
+class Expression {
+ def %(field: FieldSymbol) : Expression = new FieldAccess(this, field)
+ def readAt(index: List[Expression]) : Expression = new ArrayRead(this, index)
+ def apply(index: Expression*) : Expression = this.readAt(index.toList)
+
+ implicit def fromInt(value: Int) : Expression = new IntegerLiteral(value)
+}
+
+// Variable references
+class VarRef(symbol: VarSymbol) extends Expression
+
+// Struct and array accesses
+class FieldAccess(expression: Expression, field: FieldSymbol) extends Expression
+class ArrayRead(expression: Expression, index: List[Expression]) extends Expression
+
+// Literals
+class IntegerLiteral(value: Int) extends Expression
+object IntegerLiteral {
+ implicit def fromInt(value: Int) : Expression = new IntegerLiteral(value)
+}
+++ /dev/null
-package ofc.codegen
-
-class LoopRange(index: VariableSymbol, start: Expression, count: Expression, statement: Statement) extends Statement {
-}
+++ /dev/null
-package ofc.codegen
-
-class RecordType extends Type
package ofc.codegen
-class Symbol(name: String)
-class VariableSymbol(name: String) extends Symbol(name)
+trait Symbol {
+ def getName : String
+}
+
+case class FieldSymbol(name: String) extends Symbol {
+ def getName = name
+}
+
+abstract class VarSymbol(name: String) extends Symbol {
+ def getName = name
+}
+
+object VarSymbol {
+ implicit def toRef(symbol: VarSymbol) = new VarRef(symbol)
+}
+
+case class DeclaredVarSymbol(name: String) extends VarSymbol(name)
+abstract class UnboundVarSymbol(name: String) extends VarSymbol(name)
+case class NamedUnboundVarSymbol(name: String) extends UnboundVarSymbol(name)
+case class UniqueUnboundVarSymbol(name: String) extends UnboundVarSymbol(name)
+++ /dev/null
-package ofc.codegen
-
-trait Type
package ofc.generators.onetep
import ofc.codegen._
-class PPDFunctionSet(val basis : String, data : String) extends FunctionSet {
+class PPDFunctionSet(val basisName: String, dataName: String) extends FunctionSet {
+ val basis = NamedUnboundVarSymbol(basisName)
+ val data = NamedUnboundVarSymbol(dataName)
+ val numSpheres = basis % FieldSymbol("num");
+
def getReader = {
- new IterationTemplate(new NullStatement())
+ var sphereLoop = new ArrayRange("sphere_index", 1, numSpheres)
+ val sphereIndex = sphereLoop.getIndex
+
+ var numPPDs = (basis % FieldSymbol("n_ppds_sphere"))(sphereIndex)
+ var ppdLoop = new ArrayRange("ppd_index", 1, numPPDs)
+ new IterationTemplate(sphereLoop)
}
+
def getDiscreteIndices = List.empty
def getSpatialIndices = List.empty
/*