@@ -108,13 +108,50 @@ public CppCodeGenerator(CppTypeMapping typeMapping)
108108 } ;
109109 }
110110
111- public string GenerateCode ( IReadOnlyList < ClassNode > classes , ILogger logger )
111+ public string GenerateCode ( IReadOnlyList < ClassNode > classes , IReadOnlyList < EnumDescription > enums , ILogger logger )
112112 {
113113 var classNodes = classes ;
114114
115115 var sb = new StringBuilder ( ) ;
116116 sb . AppendLine ( $ "// Created with { Constants . ApplicationName } { Constants . ApplicationVersion } by { Constants . Author } ") ;
117117 sb . AppendLine ( ) ;
118+ sb . AppendLine (
119+ string . Join (
120+ Environment . NewLine + Environment . NewLine ,
121+ enums . Select ( e =>
122+ {
123+ var esb = new StringBuilder ( ) ;
124+ esb . Append ( "enum class " ) ;
125+ esb . Append ( e . Name ) ;
126+ esb . Append ( " : " ) ;
127+ switch ( e . Size )
128+ {
129+ case EnumDescription . UnderlyingTypeSize . OneByte :
130+ esb . AppendLine ( nodeTypeToTypeDefinationMap [ typeof ( Int8Node ) ] ) ;
131+ break ;
132+ case EnumDescription . UnderlyingTypeSize . TwoBytes :
133+ esb . AppendLine ( nodeTypeToTypeDefinationMap [ typeof ( Int16Node ) ] ) ;
134+ break ;
135+ case EnumDescription . UnderlyingTypeSize . FourBytes :
136+ esb . AppendLine ( nodeTypeToTypeDefinationMap [ typeof ( Int32Node ) ] ) ;
137+ break ;
138+ case EnumDescription . UnderlyingTypeSize . EightBytes :
139+ esb . AppendLine ( nodeTypeToTypeDefinationMap [ typeof ( Int64Node ) ] ) ;
140+ break ;
141+ }
142+ esb . AppendLine ( "{" ) ;
143+ esb . AppendLine (
144+ string . Join (
145+ "," + Environment . NewLine ,
146+ e . Values . Select ( kv => $ "\t { kv . Key } = { kv . Value } ")
147+ )
148+ ) ;
149+ esb . AppendLine ( "};" ) ;
150+
151+ return esb . ToString ( ) ;
152+ } )
153+ )
154+ ) ;
118155 sb . AppendLine (
119156 string . Join (
120157 Environment . NewLine + Environment . NewLine ,
@@ -297,6 +334,10 @@ private string GetTypeDefinition(BaseNode node, ILogger logger)
297334 {
298335 return $ "class { classInstanceNode . InnerNode . Name } ";
299336 }
337+ if ( node is EnumNode enumNode )
338+ {
339+ return enumNode . Enum . Name ;
340+ }
300341
301342 return null ;
302343 }
0 commit comments