STM32F769IDiscovery  1.00
uDANTE Audio Networking with STM32F7 DISCO board
CodeContainerBase.cs
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without modification,
6  * are permitted provided that the following conditions are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright notice,
9  * this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright notice,
11  * this list of conditions and the following disclaimer in the documentation
12  * and/or other materials provided with the distribution.
13  * 3. The name of the author may not be used to endorse or promote products
14  * derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
17  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
19  * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
21  * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
24  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
25  * OF SUCH DAMAGE.
26  *
27  * This file is part of the lwIP TCP/IP stack.
28  *
29  * Author: Martin Hentschel <info@cl-soft.de>
30  *
31  */
32 
33 using System.Collections.Generic;
34 using System;
35 
36 namespace CCodeGeneration
37 {
39  {
40  private readonly List<CodeElement> declarations = new List<CodeElement>();
41  private readonly List<CodeElement> innerElements = new List<CodeElement>();
42  private bool increaseLevel = true;
43 
44  public List<CodeElement> Declarations
45  {
46  get { return this.declarations; }
47  }
48 
49  public List<CodeElement> InnerElements
50  {
51  get { return this.innerElements; }
52  }
53 
54  protected bool IncreaseLevel
55  {
56  get { return this.increaseLevel; }
57  set { this.increaseLevel = value; }
58  }
59 
60  public void AddElements(IList<CodeElement> elements, params CodeElement[] spacerElements)
61  {
62  if (elements != null)
63  {
64  if ((spacerElements == null) || (spacerElements.Length == 0))
65  {
66  this.innerElements.AddRange(elements);
67  }
68  else
69  {
70  bool spacerAdded = false;
71 
72  foreach (CodeElement element in elements)
73  {
74  this.innerElements.Add(element);
75  this.innerElements.AddRange(spacerElements);
76  spacerAdded = true;
77  }
78 
79  if (spacerAdded)
80  {
81  // remove last spacer again
82  this.innerElements.RemoveRange(this.innerElements.Count - spacerElements.Length, spacerElements.Length);
83  }
84  }
85  }
86  }
87 
89  {
90  if (element != null)
91  {
92  this.innerElements.Add(element);
93  }
94 
95  return element;
96  }
97 
98  public Code AddCode(string code)
99  {
100  return this.AddElement(new Code(code)) as Code;
101  }
102 
103  public Code AddCodeFormat(string codeFormat, params object[] args)
104  {
105  return this.AddElement(new Code(String.Format(codeFormat, args))) as Code;
106  }
107 
109  {
110  if (declaration != null)
111  {
112  this.declarations.Add(declaration);
113  }
114 
115  return declaration;
116  }
117 
118  public override void GenerateCode(int level, CGenerator generator)
119  {
120  if (this.increaseLevel)
121  level++;
122 
123  if (this.declarations.Count > 0)
124  {
125  foreach (CodeElement element in this.declarations)
126  {
127  element.GenerateCode(level, generator);
128  }
129 
130  EmptyLine.SingleLine.GenerateCode(level, generator);
131  }
132 
133  foreach (CodeElement element in this.innerElements)
134  {
135  element.GenerateCode(level, generator);
136  }
137  }
138  }
139 }
Code AddCodeFormat(string codeFormat, params object[] args)
CodeElement AddDeclaration(CodeElement declaration)
void AddElements(IList< CodeElement > elements, params CodeElement[] spacerElements)
static readonly EmptyLine SingleLine
Definition: EmptyLine.cs:37
virtual void GenerateCode(int level, CGenerator generator)
Definition: CodeElement.cs:37
override void GenerateCode(int level, CGenerator generator)
CodeElement AddElement(CodeElement element)
override void GenerateCode(int level, CGenerator generator)
Definition: EmptyLine.cs:53