diff options
Diffstat (limited to 'src/build/genprod.scala')
-rw-r--r-- | src/build/genprod.scala | 56 |
1 files changed, 37 insertions, 19 deletions
diff --git a/src/build/genprod.scala b/src/build/genprod.scala index f7643e9968..c0c6c9c00d 100644 --- a/src/build/genprod.scala +++ b/src/build/genprod.scala @@ -9,15 +9,15 @@ // $Id$ /** <p> - * This program generates the <code>Product$i</code> classes, where - * <code>0 <= i <+ MAXWIDTH</code>. + * This program generates the <code>ProductN</code>, <code>TupleN</code> <code>FunctionN</code> classes, where + * <code>0 <= N <+ MAXWIDTH</code>. * </p> * <p> * usage: <code>scala -classpath ... genprod PATH</code> * where <code>PATH</code> is the desired output directory * </p> * - * @author Burak Emir, Stephane Micheloud + * @author Burak Emir, Stephane Micheloud, Geoffrey Washburn * @version 1.1 */ object genprod { @@ -28,21 +28,14 @@ object genprod { val SUP_FUNCTION_ARITY = 23 def productClassname(i: Int) = "Product"+i - def productFilename(i: Int) = productClassname(i)+".scala" def tupleClassname(i: Int) = "Tuple"+i - def tupleFilename(i: Int) = tupleClassname(i)+".scala" def functionClassname(i: Int) = "Function"+i - def functionFilename(i: Int) = functionClassname(i)+".scala" - def choiceClassname(i: Int) = "Choice"+i - - def choiceFilename(i: Int) = choiceClassname(i)+".scala" - def targs(i: Int) = for (j <- List.range(1, i+1)) yield "T" + j @@ -154,14 +147,19 @@ trait {functionClassname(i)}{__typeArgs__} extends AnyRef {{ def moreMethods(i:Int) = i match { case 1 => """ - /** (f compose g)(x) = f(g(x)) + /** (f compose g)(x) == f(g(x)) */ def compose[A](g: A => T1): A => R = { x => apply(g(x)) } - /** (f andThen g)(x) = g(f(x)) + /** (f andThen g)(x) == g(f(x)) */ def andThen[A](g: R => A): T1 => A = { x => g(apply(x)) } """ + case 2 => """ + /** f(x,y) == (f.uncurry)(x)(y) + */ + def uncurry: T1 => T2 => R = { (x:T1) => (y:T2) => apply(x,y) } +""" case _ => "" } def descriptiveComment(i: Int) = i match { @@ -241,11 +239,13 @@ object TupleFile { // {"$Id$"} -// generated by genprod on {new java.util.Date().toString()} +// generated by genprod on {new java.util.Date().toString()} {if(descriptiveComment(i).length > 0) "(with fancy comment)" else ""} {if(moreMethods(i).length > 0) "(with extra methods)" else ""} package scala -/** {tupleClassname(i)} is the canonical representation of a @see {productClassname(i)} */ +/** {tupleClassname(i)} is the canonical representation of a @see {productClassname(i)} + * {descriptiveComment(i)} + */ case class {tupleClassname(i)}{__typeArgs__}({ __fields__ }) extends {productClassname(i)}{__typeArgRefs__} {{ @@ -260,9 +260,19 @@ case class {tupleClassname(i)}{__typeArgs__}({ __fields__ }) } sb.toString }} + {moreMethods(i)} }} -</file> - } +</file>} + def moreMethods(i:Int) = i match { + case 2 => """ + /** Swap the elements of the tuple */ + def swap: Tuple2[T2,T1] = Tuple2(_2, _1) +""" + case _ => "" + } + def descriptiveComment(i: Int) = i match { + case _ => "" + } } // object TupleFile @@ -287,7 +297,7 @@ object ProductFile { // {"$Id$"} -// generated by genprod on {new java.util.Date().toString()} +// generated by genprod on {new java.util.Date().toString()} {if(descriptiveComment(i).length > 0) "(with fancy comment)" else ""} {if(moreMethods(i).length > 0) "(with extra methods)" else ""} package scala @@ -299,6 +309,7 @@ object {productClassname(i)} {{ }} /** {productClassname(i)} is a cartesian product of {i} components + * {descriptiveComment(i)} */ trait {productClassname(i)}{__typeArgs__} extends Product {{ @@ -324,7 +335,14 @@ trait {productClassname(i)}{__typeArgs__} extends Product {{ {for ((m, t) <- mdefs(i) zip targs(i)) yield "/** projection of this product */\n def " + m + ": " + t + "\n\n" } + + {moreMethods(i)} }} -</file> +</file>} + def moreMethods(i:Int) = i match { + case _ => "" } -} + def descriptiveComment(i: Int) = i match { + case _ => "" + } +}; |