quick.gif

space2.gif

space2.gif

space2.gif

space2.gif

space2.gif

space2.gif

space2.gif

   

space.gif

   

space.gif

  ../images/main/bullet_green_ball.gif Iterative Control

There are four types of iterative actions in e:

   

space.gif

  • while
  • repeat until
  • for each in
  • for from to
  • for
   

space.gif

  ../images/main/bulllet_4dots_orange.gif while

while loop executed as long as the condition is true.

   

space.gif

Syntax

   

space.gif

while bool-exp [do] {action; ...}

   

space.gif

  ../images/main/bullet_star_pink.gif Example - while
   

space.gif


  1 <'
  2 extend sys {
  3   run() is also {
  4     var i : int = 0;
  5     while (i < 10) {
  6       outf("Current value of i : %x\n",i);
  7       i = i + 1;
  8     };
  9   };
 10 };
 11 '>
You could download file flow_control4.e here
   

space.gif

Simulator Output

   

space.gif

Current value of i : 0
Current value of i : 1
Current value of i : 2
Current value of i : 3
Current value of i : 4
Current value of i : 5
Current value of i : 6
Current value of i : 7
Current value of i : 8
Current value of i : 9
   

space.gif

  ../images/main/bulllet_4dots_orange.gif repeat until

Execute the action block repeatedly in a loop until bool-exp is TRUE. A repeat until action performs the action block at least once. A while action might not perform the action block at all.

   

space.gif

Syntax

   

space.gif

repeat {action; ...} until bool-exp

   

space.gif

  ../images/main/bullet_star_pink.gif Example - repeat until
   

space.gif


  1 <'
  2 extend sys {
  3   run() is also {
  4     var i : int = 0;
  5     repeat {
  6       outf("Current value of i : %x\n",i);
  7       i = i + 1;
  8     } until  (i == 10);
  9   };
 10 };
 11 '>
You could download file flow_control5.e here
   

space.gif

Simulator Output

   

space.gif

Current value of i : 0
Current value of i : 1
Current value of i : 2
Current value of i : 3
Current value of i : 4
Current value of i : 5
Current value of i : 6
Current value of i : 7
Current value of i : 8
Current value of i : 9
   

space.gif

   

space.gif

  ../images/main/bulllet_4dots_orange.gif for each in

For each item in list-exp, if its type matches type, execute the action block. Inside the action block, the implicit variable it (or the optional item-name) refers to the matched item, and the implicit variable index (or the optional index-name) reflects the index of the current item. If reverse is specified, list-exp is traversed in reverse order, from last to first. The implicit variable index (or the optional index-name) starts at zero for regular loops, and is calculated to start at "(list.size() - 1)" for reverse loops.

   

space.gif

Syntax

   

space.gif

for each [type] [(item-name)] [using index (index-name)]

in [reverse] list-exp [do] {action; ...}

   

space.gif

Each for each in action defines two new local variables for the loop, named by default it and index. Keep the following in mind:

   

space.gif

  • If loops are nested one inside the other, the local variables of the internal loop hide those of the external loop. To overcome this hiding, specify the item-name and index-name with unique names.
  • Within the action block, you cannot assign a value to it or index-- or to item-name or index-name.
   

space.gif

  ../images/main/bullet_star_pink.gif Example - for each in
   

space.gif


  1 <'
  2 struct packet {
  3     length: int;
  4     keep length < 513;
  5     keep length > 63;
  6 };
  7 
  8 struct tx_gen {
  9     ! packets: list of packet; 
 10    keep packets.size() == 2;
 11     ! packet : packet;
 12 
 13    txgen () is {
 14      gen packets;
 15      out("--------Generated---------------------");
 16      print packets;
 17      for each (packet) in packets do {
 18        packet_class(packet); 
 19      };
 20      out("--------With it------------------------");
 21      for each  in packets do {
 22        packet_class(it); 
 23      };
 24      out("--------With reverse-------------------");
 25      for each  in reverse packets do {
 26        outf("Current packet position is %d\n", index );
 27        packet_class(it); 
 28      };
 29 
 30    };
 31 
 32    packet_class (pkt : packet) is {
 33      outf("Current size of packet : %d\n",pkt.length);
 34    }; 
 35 }; 
 36 
 37 extend sys {
 38   U_txgen : tx_gen;
 39   run() is also {
 40     U_txgen.txgen();
 41   };
 42 };
 43 '>
You could download file flow_control6.e here
   

space.gif

Simulator Output

   

space.gif

--------Generated---------------------
  packets = 
item   type        length     
---------------------------------------------------------------------------
0.     packet      175         
1.     packet      479         
Current size of packet : 175
Current size of packet : 479
--------With it------------------------
Current size of packet : 175
Current size of packet : 479
--------With reverse-------------------
Current packet position is 1
Current size of packet : 479
Current packet position is 0
Current size of packet : 175
   

space.gif

  ../images/main/bulllet_4dots_orange.gif for from to

Creates a temporary variable var-name of type int, and repeatedly executes the action block while incrementing (or decrementing if down is specified) its value from from-exp to to-exp in interval values specified by step-exp (defaults to 1).

   

space.gif

In other words, the loop is executed until the value of var-name is greater than the value of to-exp (if down is not specified) or until the value of var-name is less than the value of to-exp (if down is specified).

   

space.gif

Syntax

   

space.gif

for var-name from from-exp [down] to to-exp [step step-exp] [do] {action; ...}

   

space.gif

  ../images/main/bullet_star_pink.gif Example - for from to
   

space.gif


  1 <'
  2 extend sys {
  3   run() is also {
  4     var i : int = 0;
  5     out ("Loop 1");
  6     for i from 2 to 2 * 4 do { 
  7       out(i); 
  8     }; 
  9     out ("Loop 2");
 10     for i from 1 to 5 step 3 do { 
 11       out(i); 
 12     }; 
 13     out ("Loop 3");
 14     for i from 7 down to 1 step 2 do { 
 15       out(i); 
 16     }; 
 17   };
 18 };
 19 '>
You could download file flow_control7.e here
   

space.gif

Simulator Output

   

space.gif

Loop 1
2
3
4
5
6
7
8
Loop 2
1
4
Loop 3
7
5
3
1
   

space.gif

  ../images/main/bulllet_4dots_orange.gif for - C style

The for loop works similarly to the for loop in the C language. This for loop executes the initial-action once, and then checks the bool-exp. If the bool-exp is TRUE, it executes the action block followed by the step-action. It repeats this sequence in a loop for as long as bool-exp is TRUE.

   

space.gif

  • You must enter an initial-action.
  • If you use a loop variable within a for loop, you must declare it before the loop (unlike the temporary variable of type int automatically declared in a for from to loop).
  • Although this action is similar to a C-style for loop, keep in mind that the initial-action and step-action must be e style actions.
   

space.gif

Syntax

   

space.gif

for {initial-action; bool-exp; step-action} [do] {action; ...}

   

space.gif

  ../images/main/bullet_star_pink.gif Example - for
   

space.gif


  1 <'
  2 extend sys {
  3   run() is also {
  4     var i : int = 0;
  5     var j : int = 0;
  6     for {i=0; i < 15; i = i + 1} do { 
  7       outf("Current value of i : %d\n",i); 
  8       outf("Current value of j : %d\n",j); 
  9       if ( i < 3) {
 10         continue;
 11       } else {
 12          j = j + 1;
 13       };
 14       if (j > 4) {
 15         break;
 16       };
 17     }; 
 18   };
 19 };
 20 '>
You could download file flow_control8.e here
   

space.gif

Simulator Output

   

space.gif

Current value of i : 0
Current value of j : 0
Current value of i : 1
Current value of j : 0
Current value of i : 2
Current value of j : 0
Current value of i : 3
Current value of j : 0
Current value of i : 4
Current value of j : 1
Current value of i : 5
Current value of j : 2
Current value of i : 6
Current value of j : 3
Current value of i : 7
Current value of j : 4
   

space.gif

   

space.gif

   

space.gif

   

space.gif

space2.gif

space2.gif

space2.gif

space2.gif

space2.gif

  

Copyright © 1998-2014

Deepak Kumar Tala - All rights reserved

Do you have any Comment? mail me at:deepak@asic-world.com