1616package  uk .co .real_logic .sbe .generation .c ;
1717
1818import  static  uk .co .real_logic .sbe .generation .c .CUtil .cTypeName ;
19+ import  static  uk .co .real_logic .sbe .generation .c .CUtil .formatStructName ;
1920import  static  uk .co .real_logic .sbe .generation .c .CUtil .dotsToUnderscore ;
2021import  static  uk .co .real_logic .sbe .generation .c .CUtil .fromCamelCaseToUnderscore ;
2122import  static  uk .co .real_logic .sbe .generation .c .CUtil .whitespaces ;
@@ -236,18 +237,62 @@ public void generateMessageHeader(final StringBuilder sb)
236237 sb .append (NEWLINE );
237238}
238239
240+ public  void  generateEnum (final  StringBuilder  sb , final  List <Token > tokens , final  Token  enumToken )
241+ {
242+ final  List <Token > subTokens  = tokens .subList (1 , tokens .size () - 1 );
243+ final  String  enumName  = tokens .get (0 ).name ();
244+ 
245+  sb .append ("typedef enum sbe_" );
246+  sb .append (fromCamelCaseToUnderscore (enumName ));
247+  sb .append ("_e {\n " );
248+ 
249+  for  (final  Token  token  : subTokens )
250+  {
251+  sb .append (INDENT ).append ("SBE_" ).append (fromCamelCaseToUnderscore (enumName ).toUpperCase ());
252+  sb .append ("_" ).append (token .name ()).append (" = " );
253+  sb .append (token .encoding ().constValue ().toString ()).append (",\n " );
254+  }
255+ 
256+  sb .append ("} sbe_" ).append (fromCamelCaseToUnderscore (enumName )).append ("_t;\n \n " );
257+ }
258+ 
239259public  void  generateMessage (final  StringBuilder  sb , final  String  messageName , Token  msgToken , List <Token > msgFields )
240260{
241261final  String  structName  = fromCamelCaseToUnderscore (messageName );
242262sb .append (String .format ("typedef struct sbe_%1$s_s {\n " , structName ));
243- for  (Token   t  :  msgFields )
263+ for  (int   i  =  0 ,  size  =  msgFields . size ();  i  <  size ;  i ++ )
244264{
245- if  (t .signal () == Signal .ENCODING )
265+ final  Token  t  = msgFields .get (i );
266+ if  (t .signal () == Signal .BEGIN_FIELD  && !t .isConstantEncoding ())
246267{
268+ final  Token  encodingToken  = msgFields .get (i  + 1 );
247269sb .append (INDENT );
248- sb .append (cTypeName (t .encoding ().primitiveType ()));
270+ switch  (encodingToken .signal ())
271+  {
272+  case  ENCODING :
273+  sb .append (cTypeName (encodingToken .encoding ().primitiveType ()));
274+  break ;
275+ 
276+  case  BEGIN_ENUM :
277+  sb .append (cTypeName (encodingToken .encoding ().primitiveType ()));
278+  break ;
279+ 
280+  case  BEGIN_SET :
281+  sb .append (formatStructName (encodingToken .name ()));
282+  break ;
283+ 
284+  case  BEGIN_COMPOSITE :
285+  sb .append (formatStructName (encodingToken .name ()));
286+  break ;
287+  default :
288+  break ;
289+  }
249290sb .append (" " );
250291sb .append (fromCamelCaseToUnderscore (t .name ()));
292+ if  (encodingToken .encoding ().primitiveType () != null  && 
293+ encodingToken .encodedLength () != encodingToken .encoding ().primitiveType ().size ()) {
294+  sb .append ("[" +encodingToken .encodedLength ()+"]" );
295+ 	}
251296sb .append (";" );
252297sb .append (NEWLINE );
253298}
@@ -270,6 +315,28 @@ public void generate() throws IOException
270315
271316sb .append (NEWLINE );
272317
318+ for  (final  List <Token > tokens  : ir .types ())
319+  {
320+  switch  (tokens .get (0 ).signal ())
321+  {
322+  case  BEGIN_ENUM :
323+  final  Token  enumToken  = tokens .get (0 );
324+  generateEnum (sb , tokens , enumToken );
325+  break ;
326+ 
327+  case  BEGIN_SET :
328+  //generateChoiceSet(tokens); 
329+  break ;
330+ 
331+  case  BEGIN_COMPOSITE :
332+  //generateComposite(tokens); 
333+  break ;
334+  
335+  default :
336+  break ;
337+  }
338+  }
339+ 
273340for  (final  List <Token > tokens  : ir .messages ())
274341 {
275342 final  Token  msgToken  = tokens .get (0 );
@@ -287,7 +354,6 @@ public void generate() throws IOException
287354 final  List <Token > varData  = new  ArrayList <>();
288355 collectVarData (messageBody , i , varData );
289356
290-  sb .append (messageName );
291357 sb .append (NEWLINE );
292358 generateMessage (sb , messageName , msgToken , fields );
293359 sb .append (NEWLINE );
0 commit comments