codesimian
Class Loop

java.lang.Object
  extended by codesimian.CS<CSGeneric>
      extended by codesimian.DefaultCS
          extended by codesimian.Loop
All Implemented Interfaces:
CodeSimian
Direct Known Subclasses:
Loop.DynamicLoop, Loop.StaticLoop

public abstract class Loop
extends DefaultCS

Executes a CS a number of times defined by an other CS's value. A loop can only execute 'maxLoops' number of times.


Nested Class Summary
static class Loop.DynamicLoop
          the boolean loop condition, or max number of loops, is checked every iteration
static class Loop.ForEach
           
static class Loop.StaticLoop
          the boolean loop condition, or max number of loops, is checked ONCE when the loop starts
 
Field Summary
static java.lang.Number defaultMaxLoops
          Each Loop's maxLoops is set to this value at instantiation.
Default does not limit loops: new NumberStack.NeverEmpty(Loop.UNLIMITED_LOOPS)
static int UNLIMITED_LOOPS
           
 
Fields inherited from class codesimian.CS
DESCRIPTION, END, EXECPROXY, HEAP, JAVACODE, MYFUEL, NAME, NEWINSTANCE, NULL, PARENT, PARSEPRIORITY, PREV, TESTER, THIS
 
Constructor Summary
Loop()
           
 
Method Summary
abstract  int getMaxLoops()
           
abstract  boolean hasCountingIterationVar()
          true if this loop has an iteration var that counts iterations.
 double internalCost()
          Returns 3 + 2 * average loops per exec
 java.lang.String keyword()
          For the CodeSimian language as a String.
CodeSimian language keyword, like "+" "*" "max" ">" etc.

Override this function if you want to specify a keyword other than how I derive them from the class name, like + for Add.

Some CSs might never be intended to be used in the language by their keyword.
The best example (4/05) is Num, because it is used in the language like "3.4" instead of "num()".
 int minP()
          For DForProxy().
Minimum number of parameters in param[] needed to call DForProxy().
Defines which indexs of param[] DForProxy() can use.
Functions with a different number of parameters must override this.
OVERRIDE THIS FUNCTION IF EXEC USES A DIFFERENT NUMBER OF PARAMETERS.
Default is 1.
 boolean paramOrderMatters()
           
abstract  void setMaxLoops(int i)
           
abstract  boolean sizeKnownWhenLoopStarts()
          true if the number of iterations is known immediately when the loop starts In this java example: for (int i=0; i ...end is checked once at the start of the loop.
Its value remains constant after that.
 
Methods inherited from class codesimian.DefaultCS
B, C, countP, decrementMyFuel, deleteP, description, DForProxy, F, fuel, getExec, getObject, heap, I, indexP, indexPName, insertB, insertC, insertD, insertF, insertI, insertJ, insertL, insertL, insertL1, insertP, insertS, insertZ, J, javaCode, LForProxy, LForProxy, myFuel, name, newInstance, objectToCS, objectToCSArray, objectToCSArray, P, prevD, prevL, PType, S, setB, setC, setCountP, setD, setD, setExec, setF, setFuel, setI, setJ, setL, setL, setL, setL1, setMyFuel, setName, setObject, setP, setPrevExec, setPType, setS, setZ, start, toString, V, Z
 
Methods inherited from class codesimian.CS
addB, addC, addD, addF, addI, addJ, addL, addP, addP, addP, addP, addP, addS, addZ, BForProxy, CForProxy, clone, cost, D, deleteP, FForProxy, GETB, GETC, GETD, GETF, GETI, GETJ, GETL, GETS, GETZ, IForProxy, isIllusion, JForProxy, L, L, L, L, L, maxD, maxP, minD, overwrites, parent, parsePriority, PB, PC, PD, PF, PI, PJ, PL, prevB, prevC, prevF, prevI, prevJ, prevS, prevZ, proxyOf, PS, PZ, reflect, reflect, reflect6, setB, SETB, setC, SETC, setCost, SETD, setDescription, setF, SETF, setHeap, setI, SETI, setJ, SETJ, SETL, setL, setL, setParent, setParsePriority, setProxyOf, setS, SETS, setTester, setZ, SETZ, SForProxy, tester, toJavaCode, VForProxy, voidReflect, ZForProxy
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

UNLIMITED_LOOPS

public static final int UNLIMITED_LOOPS
See Also:
Constant Field Values

defaultMaxLoops

public static java.lang.Number defaultMaxLoops
Each Loop's maxLoops is set to this value at instantiation.
Default does not limit loops: new NumberStack.NeverEmpty(Loop.UNLIMITED_LOOPS)

Constructor Detail

Loop

public Loop()
Method Detail

sizeKnownWhenLoopStarts

public abstract boolean sizeKnownWhenLoopStarts()
true if the number of iterations is known immediately when the loop starts In this java example: for (int i=0; i ...end is checked once at the start of the loop.
Its value remains constant after that. (if this returns true)
If there is no 'end', like if its a while loop, returns false.


hasCountingIterationVar

public abstract boolean hasCountingIterationVar()
true if this loop has an iteration var that counts iterations. It may count by any constant and start and end at any values.


setMaxLoops

public abstract void setMaxLoops(int i)

getMaxLoops

public abstract int getMaxLoops()

minP

public int minP()
Description copied from class: DefaultCS
For DForProxy().
Minimum number of parameters in param[] needed to call DForProxy().
Defines which indexs of param[] DForProxy() can use.
Functions with a different number of parameters must override this.
OVERRIDE THIS FUNCTION IF EXEC USES A DIFFERENT NUMBER OF PARAMETERS.
Default is 1.

Overrides:
minP in class DefaultCS

paramOrderMatters

public boolean paramOrderMatters()

keyword

public java.lang.String keyword()
Description copied from class: DefaultCS
For the CodeSimian language as a String.
CodeSimian language keyword, like "+" "*" "max" ">" etc.

Override this function if you want to specify a keyword other than how I derive them from the class name, like + for Add.

Some CSs might never be intended to be used in the language by their keyword.
The best example (4/05) is Num, because it is used in the language like "3.4" instead of "num()".
Default: Returns class name, minus package name (and its dots), and change the first letter to lowercase.

For example, CS.MaxParams does not override keyword(), which returns "maxP".

Overrides:
keyword in class DefaultCS
See Also:
CS.parent(), CS.newInstance(), CS.name()

internalCost

public double internalCost()
Returns 3 + 2 * average loops per exec