Skip to content

Commit b9fc7bb

Browse files
committed
modifications
1 parent 563a6a2 commit b9fc7bb

File tree

2 files changed

+76
-8
lines changed

2 files changed

+76
-8
lines changed

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/c/CGenerator.java

Lines changed: 70 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package uk.co.real_logic.sbe.generation.c;
1717

1818
import static uk.co.real_logic.sbe.generation.c.CUtil.cTypeName;
19+
import static uk.co.real_logic.sbe.generation.c.CUtil.formatStructName;
1920
import static uk.co.real_logic.sbe.generation.c.CUtil.dotsToUnderscore;
2021
import static uk.co.real_logic.sbe.generation.c.CUtil.fromCamelCaseToUnderscore;
2122
import 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+
239259
public void generateMessage(final StringBuilder sb, final String messageName, Token msgToken, List<Token> msgFields)
240260
{
241261
final String structName = fromCamelCaseToUnderscore(messageName);
242262
sb.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);
247269
sb.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+
}
249290
sb.append(" ");
250291
sb.append(fromCamelCaseToUnderscore(t.name()));
292+
if (encodingToken.encoding().primitiveType() != null &&
293+
encodingToken.encodedLength() != encodingToken.encoding().primitiveType().size()) {
294+
sb.append("["+encodingToken.encodedLength()+"]");
295+
}
251296
sb.append(";");
252297
sb.append(NEWLINE);
253298
}
@@ -270,6 +315,28 @@ public void generate() throws IOException
270315

271316
sb.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+
273340
for (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);

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/c/CUtil.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,12 @@ public static String fromCamelCaseToUnderscore(final String str)
9191
{
9292
if (Character.isUpperCase(str.charAt(i)))
9393
{
94-
if (i > 0)
95-
{
96-
tmp.append('_');
97-
}
94+
if (i >= 1 && !Character.isUpperCase(str.charAt(i-1))) {
95+
if (i > 0)
96+
{
97+
tmp.append('_');
98+
}
99+
}
98100
tmp.append(Character.toLowerCase(str.charAt(i)));
99101
}
100102
else

0 commit comments

Comments
 (0)