]> git.unchartedbackwaters.co.uk Git - francis/ofc.git/commitdiff
Replace array ranges with iteration symbols.
authorFrancis Russell <francis@unchartedbackwaters.co.uk>
Fri, 30 Mar 2012 09:47:46 +0000 (10:47 +0100)
committerFrancis Russell <francis@unchartedbackwaters.co.uk>
Fri, 30 Mar 2012 09:47:46 +0000 (10:47 +0100)
src/ofc/codegen/ArrayRange.scala [deleted file]
src/ofc/codegen/ScopeStatement.scala [new file with mode: 0644]
src/ofc/codegen/Symbol.scala
src/ofc/generators/onetep/PPDFunctionSet.scala

diff --git a/src/ofc/codegen/ArrayRange.scala b/src/ofc/codegen/ArrayRange.scala
deleted file mode 100644 (file)
index 070e394..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-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)
-}
diff --git a/src/ofc/codegen/ScopeStatement.scala b/src/ofc/codegen/ScopeStatement.scala
new file mode 100644 (file)
index 0000000..22cbf32
--- /dev/null
@@ -0,0 +1,6 @@
+package ofc.codegen
+
+class ScopeStatement(var statements: List[Statement]) extends Statement {
+  def this() = this(List.empty)
+  def +=(stat: Statement) = statements += stat
+}
index af5fedb8c9bfcc235e54918143d64f0d55ec8388..b55caace0c7eb471b47f120586a61bb6c2c2cf15 100644 (file)
@@ -19,4 +19,4 @@ object VarSymbol {
 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)
+class IterationSymbol(name: String, count: Expression) extends UnboundVarSymbol(name)
index 7d90ebaebb1fa1368fdf42e56220874eaa0e7d39..175bf8590633b435f49e097c16634318730d38ea 100644 (file)
@@ -4,14 +4,16 @@ import ofc.codegen._
 class PPDFunctionSet(val basisName: String, dataName: String) extends FunctionSet {
   val basis = NamedUnboundVarSymbol(basisName)
   val data =  NamedUnboundVarSymbol(dataName)
+  val pubCell = NamedUnboundVarSymbol("pub_cell")
+
   val numSpheres = basis % FieldSymbol("num");
+  val ppdWidths = for(dim <- 1 to 3) yield pubCell % FieldSymbol("n_ppds_a"+dim)
 
   def getReader = {
-    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)
+    var sphereIndex = new IterationSymbol("sphere_index", numSpheres)
+    val numPPDs = (basis % FieldSymbol("n_ppds_sphere"))(sphereIndex)
+    val ppdIndex = new IterationSymbol("ppd_index", numPPDs)
+    val ppdRanges = for(dim <- 1 to 3) yield new IterationSymbol("point"+dim, ppdWidths(dim)) 
     new IterationTemplate(sphereLoop)
   }
 
@@ -31,7 +33,7 @@ class PPDFunctionSet(val basisName: String, dataName: String) extends FunctionSe
     def generateIterationFooter(names: NameManager) = "end do"
     def getDeclarations(names: NameManager) = List("integer :: "+names(this))
   }
-
+  
   class PPDIndex(parent: PPDFunctionSet) extends DiscreteIndex {
     var denseIndexNames : List[String] = Nil
     var startNames : List[String] = Nil