f821e0d46be666062a674af0eae416a4ab71970d
[roobuilder] / src / ccode / valaccodeforstatement.vala
1 /* valaccodeforstatement.vala
2  *
3  * Copyright (C) 2006-2008  Jürg Billeter
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
18  *
19  * Author:
20  *      Jürg Billeter <j@bitron.ch>
21  */
22
23 using GLib;
24
25 /**
26  * Represents a for iteration statement in the C code.
27  */
28 public class Vala.CCodeForStatement : CCodeStatement {
29         /**
30          * The loop condition.
31          */
32         public CCodeExpression? condition { get; set; }
33
34         /**
35          * The loop body.
36          */
37         public CCodeStatement body { get; set; }
38
39         private List<CCodeExpression> initializer = new ArrayList<CCodeExpression> ();
40         private List<CCodeExpression> iterator = new ArrayList<CCodeExpression> ();
41
42         public CCodeForStatement (CCodeExpression? condition, CCodeStatement? body = null) {
43                 this.condition = condition;
44                 this.body = body;
45         }
46
47         /**
48          * Appends the specified expression to the list of initializers.
49          *
50          * @param expr an initializer expression
51          */
52         public void add_initializer (CCodeExpression expr) {
53                 initializer.add (expr);
54         }
55
56         /**
57          * Appends the specified expression to the iterator.
58          *
59          * @param expr an iterator expression
60          */
61         public void add_iterator (CCodeExpression expr) {
62                 iterator.add (expr);
63         }
64
65         public override void write (CCodeWriter writer) {
66                 bool first;
67
68                 writer.write_indent (line);
69                 writer.write_string ("for (");
70
71                 first = true;
72                 foreach (CCodeExpression init_expr in initializer) {
73                         if (!first) {
74                                 writer.write_string (", ");
75                         } else {
76                                 first = false;
77                         }
78                         if (init_expr != null) {
79                                 init_expr.write (writer);
80                         }
81                 }
82
83                 writer.write_string ("; ");
84                 if (condition != null) {
85                         condition.write (writer);
86                 }
87                 writer.write_string ("; ");
88
89                 first = true;
90                 foreach (CCodeExpression it_expr in iterator) {
91                         if (!first) {
92                                 writer.write_string (", ");
93                         } else {
94                                 first = false;
95                         }
96                         if (it_expr != null) {
97                                 it_expr.write (writer);
98                         }
99                 }
100
101                 writer.write_string (")");
102                 body.write (writer);
103         }
104 }