source: azure_iot_hub_f767zi/trunk/asp_baseplatform/lwip/contrib-2.1.0/apps/LwipMibCompiler/CCodeGeneration/Switch.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.9 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;
34using System.Collections.Generic;
35
36namespace CCodeGeneration
37{
38 public class SwitchCase : CodeContainerBase
39 {
40 public string Value { get; set; }
41
42 public SwitchCase()
43 {
44 }
45
46 public SwitchCase(string value)
47 {
48 this.Value = value;
49 }
50
51 public bool IsDefault
52 {
53 get { return (this.Value.ToLowerInvariant() == "default"); }
54 }
55
56 public static SwitchCase GenerateDefault()
57 {
58 return new SwitchCase("default");
59 }
60
61 public override void GenerateCode(int level, CGenerator generator)
62 {
63 if (!String.IsNullOrWhiteSpace(this.Value))
64 {
65 generator.IndentLine(level);
66 if (this.IsDefault)
67 {
68 generator.OutputStream.Write("default:");
69 }
70 else
71 {
72 generator.OutputStream.Write(String.Format("case {0}:", this.Value));
73 }
74 generator.WriteNewLine();
75 generator.IndentLine(level + 1);
76 generator.OutputStream.Write("{");
77 generator.WriteNewLine();
78
79 base.GenerateCode(level + 1, generator);
80
81 generator.IndentLine(level + 1);
82 generator.OutputStream.Write("}");
83 generator.WriteNewLine();
84
85 generator.IndentLine(level + 1);
86 generator.OutputStream.Write("break;");
87 generator.WriteNewLine();
88 }
89 }
90 }
91
92 public class Switch: CodeElement
93 {
94 public string SwitchVar { get; set; }
95
96 private List<SwitchCase> switches = new List<SwitchCase>();
97
98 public Switch()
99 {
100 }
101
102 public Switch(string switchVar)
103 {
104 this.SwitchVar = switchVar;
105 }
106
107 public List<SwitchCase> Switches
108 {
109 get { return this.switches; }
110 }
111
112 public override void GenerateCode(int level, CGenerator generator)
113 {
114 if (!String.IsNullOrWhiteSpace(this.SwitchVar))
115 {
116 generator.IndentLine(level);
117 generator.OutputStream.Write(String.Format("switch ({0})", this.SwitchVar));
118 generator.WriteNewLine();
119 generator.IndentLine(level);
120 generator.OutputStream.Write("{");
121 generator.WriteNewLine();
122
123 SwitchCase defaultCase = null; // generate 'default' always as last case
124 foreach (SwitchCase switchCase in this.switches)
125 {
126 if (switchCase.IsDefault)
127 {
128 defaultCase = switchCase;
129 }
130 else
131 {
132 switchCase.GenerateCode(level + 1, generator);
133 }
134 }
135 if (defaultCase != null)
136 {
137 defaultCase.GenerateCode(level + 1, generator);
138 }
139
140 generator.IndentLine(level);
141 generator.OutputStream.Write("}");
142 generator.WriteNewLine();
143 }
144 }
145 }
146}
Note: See TracBrowser for help on using the repository browser.