source: azure_iot_hub_f767zi/trunk/asp_baseplatform/lwip/contrib-2.1.0/apps/LwipMibCompiler/CCodeGeneration/CodeContainerBase.cs@ 457

Last change on this file since 457 was 457, checked in by coas-nagasima, 4 years ago

ファイルを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csharp;charset=UTF-8
File size: 3.8 KB
Line 
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
33using System.Collections.Generic;
34using System;
35
36namespace CCodeGeneration
37{
38 public class CodeContainerBase: CodeElement
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
88 public CodeElement AddElement(CodeElement element)
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
108 public CodeElement AddDeclaration(CodeElement declaration)
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}
Note: See TracBrowser for help on using the repository browser.