Skip to content

Commit 6959f21

Browse files
committed
Back out most changes to pre-Rust classes
1 parent 1ec2e6c commit 6959f21

File tree

12 files changed

+190
-152
lines changed

12 files changed

+190
-152
lines changed

build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,7 @@ task(generateRustCarExample, type: JavaExec) {
477477
classpath = project(':sbe-all').sourceSets.main.runtimeClasspath
478478
systemProperties(
479479
'sbe.output.dir': 'rust/car_example/src',
480-
'sbe.target.language': 'rust',
480+
'sbe.target.language': 'uk.co.real_logic.sbe.generation.rust.Rust',
481481
'sbe.target.namespace': 'car_example_generated_codec')
482482
args = ['sbe-tool/src/test/resources/example-schema.xml']
483483
}
@@ -500,11 +500,11 @@ task(runRustCarExample, type: Exec) {
500500
}
501501

502502
def cargo_exists() {
503-
def stdout = new ByteArrayOutputStream()
504503
def result = project.exec {
505504
commandLine 'cargo'
506505
args '-v'
507-
standardOutput = stdout
506+
standardOutput = new ByteArrayOutputStream()
507+
errorOutput = new ByteArrayOutputStream()
508508
}
509509
return result.exitValue == 0
510510
}

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

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import uk.co.real_logic.sbe.generation.golang.GolangGenerator;
2222
import uk.co.real_logic.sbe.generation.golang.GolangOutputManager;
2323
import uk.co.real_logic.sbe.generation.java.JavaGenerator;
24-
import uk.co.real_logic.sbe.generation.rust.Rust;
2524
import uk.co.real_logic.sbe.ir.Ir;
2625

2726
import java.io.IOException;
@@ -59,14 +58,6 @@ public CodeGenerator newInstance(final Ir ir, final String outputDir) throws IOE
5958
{
6059
return new GolangGenerator(ir, new GolangOutputManager(outputDir, ir.applicableNamespace()));
6160
}
62-
},
63-
64-
RUST()
65-
{
66-
public CodeGenerator newInstance(final Ir ir, final String outputDir) throws IOException
67-
{
68-
return Rust.defaultRustGenerator(ir, outputDir);
69-
}
7061
};
7162

7263
/**
@@ -93,6 +84,7 @@ public static TargetCodeGenerator get(final String name)
9384
{
9485
// do nothing and fall through
9586
}
87+
9688
throw new IllegalArgumentException("No code generator for name: " + name);
9789
}
9890
}

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/cpp/CppGenerator.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,20 +108,32 @@ public void generate() throws IOException
108108

109109
for (final List<Token> tokens : ir.messages())
110110
{
111-
final MessageComponents components = GenerationUtil.collectMessageComponents(tokens);
112-
final String className = formatClassName(components.messageToken.name());
111+
final Token msgToken = tokens.get(0);
112+
final String className = formatClassName(msgToken.name());
113113

114114
try (Writer out = outputManager.createOutput(className))
115115
{
116116
out.append(generateFileHeader(ir.namespaces(), className, typesToInclude));
117117
out.append(generateClassDeclaration(className));
118-
out.append(generateMessageFlyweightCode(className, components.messageToken));
118+
out.append(generateMessageFlyweightCode(className, msgToken));
119+
120+
final List<Token> messageBody = tokens.subList(1, tokens.size() - 1);
121+
int i = 0;
122+
123+
final List<Token> fields = new ArrayList<>();
124+
i = collectFields(messageBody, i, fields);
125+
126+
final List<Token> groups = new ArrayList<>();
127+
i = collectGroups(messageBody, i, groups);
128+
129+
final List<Token> varData = new ArrayList<>();
130+
collectVarData(messageBody, i, varData);
119131

120132
final StringBuilder sb = new StringBuilder();
121-
out.append(generateFields(className, components.fields, BASE_INDENT));
122-
generateGroups(sb, components.groups, BASE_INDENT);
133+
out.append(generateFields(className, fields, BASE_INDENT));
134+
generateGroups(sb, groups, BASE_INDENT);
123135
out.append(sb);
124-
out.append(generateVarData(className, components.varData, BASE_INDENT));
136+
out.append(generateVarData(className, varData, BASE_INDENT));
125137
out.append("};\n");
126138
out.append(CppUtil.closingBraces(ir.namespaces().length)).append("#endif\n");
127139
}

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/golang/GolangGenerator.java

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,8 @@ public void generate() throws IOException
137137

138138
for (final List<Token> tokens : ir.messages())
139139
{
140-
final MessageComponents components = GenerationUtil.collectMessageComponents(tokens);
141-
final String typeName = formatTypeName(components.messageToken.name());
140+
final Token msgToken = tokens.get(0);
141+
final String typeName = formatTypeName(msgToken.name());
142142

143143
try (Writer out = outputManager.createOutput(typeName))
144144
{
@@ -153,10 +153,22 @@ public void generate() throws IOException
153153

154154
generateMessageCode(sb, typeName, tokens);
155155

156-
generateFields(sb, typeName, components.fields, "");
157-
generateGroups(sb, components.groups, typeName);
158-
generateGroupProperties(sb, components.groups, typeName);
159-
generateVarData(sb, typeName, components.varData, "");
156+
final List<Token> messageBody = tokens.subList(1, tokens.size() - 1);
157+
int i = 0;
158+
159+
final List<Token> fields = new ArrayList<>();
160+
i = collectFields(messageBody, i, fields);
161+
162+
final List<Token> groups = new ArrayList<>();
163+
i = collectGroups(messageBody, i, groups);
164+
165+
final List<Token> varData = new ArrayList<>();
166+
collectVarData(messageBody, i, varData);
167+
168+
generateFields(sb, typeName, fields, "");
169+
generateGroups(sb, groups, typeName);
170+
generateGroupProperties(sb, groups, typeName);
171+
generateVarData(sb, typeName, varData, "");
160172

161173
out.append(generateFileHeader(ir.namespaces()));
162174
out.append(sb);

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

Lines changed: 51 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.io.Writer;
2828
import java.util.ArrayList;
2929
import java.util.List;
30+
import java.util.function.BiConsumer;
3031
import java.util.function.Function;
3132

3233
import static uk.co.real_logic.sbe.SbeTool.JAVA_INTERFACE_PACKAGE;
@@ -168,34 +169,48 @@ public void generate() throws IOException
168169

169170
for (final List<Token> tokens : ir.messages())
170171
{
171-
final MessageComponents messageComponents = GenerationUtil.collectMessageComponents(tokens);
172-
generateDecoder(BASE_INDENT, messageComponents);
173-
generateEncoder(BASE_INDENT, messageComponents);
172+
final Token msgToken = tokens.get(0);
173+
final List<Token> messageBody = getMessageBody(tokens);
174+
175+
int i = 0;
176+
final List<Token> fields = new ArrayList<>();
177+
i = collectFields(messageBody, i, fields);
178+
179+
final List<Token> groups = new ArrayList<>();
180+
i = collectGroups(messageBody, i, groups);
181+
182+
final List<Token> varData = new ArrayList<>();
183+
collectVarData(messageBody, i, varData);
184+
185+
generateDecoder(BASE_INDENT, fields, groups, varData, msgToken);
186+
generateEncoder(BASE_INDENT, fields, groups, varData, msgToken);
174187
}
175188
}
176189

177190
private void generateEncoder(
178191
final String indent,
179-
final MessageComponents components) throws IOException
192+
final List<Token> fields,
193+
final List<Token> groups,
194+
final List<Token> varData,
195+
final Token msgToken) throws IOException
180196
{
181-
final Token msgToken = components.messageToken;
182197
final String className = formatClassName(encoderName(msgToken.name()));
183198
final String implementsString = implementsInterface(GEN_MESSAGE_ENCODER_FLYWEIGHT);
184199

185200
try (Writer out = outputManager.createOutput(className))
186201
{
187202
out.append(generateMainHeader(ir.applicableNamespace()));
188203

189-
generateAnnotations(indent, className, components.groups, out, 0, this::encoderName);
204+
generateAnnotations(indent, className, groups, out, 0, this::encoderName);
190205
out.append(generateDeclaration(className, implementsString));
191206
out.append(generateEncoderFlyweightCode(className, msgToken));
192-
out.append(generateEncoderFields(className, components.fields, indent));
207+
out.append(generateEncoderFields(className, fields, indent));
193208

194209
final StringBuilder sb = new StringBuilder();
195-
generateEncoderGroups(sb, className, components.groups, indent);
210+
generateEncoderGroups(sb, className, groups, indent);
196211
out.append(sb);
197212

198-
out.append(generateEncoderVarData(className, components.varData, indent));
213+
out.append(generateEncoderVarData(className, varData, indent));
199214

200215
out.append(generateEncoderDisplay(formatClassName(decoderName(msgToken.name())), indent));
201216

@@ -205,29 +220,30 @@ private void generateEncoder(
205220

206221
private void generateDecoder(
207222
final String indent,
208-
final MessageComponents components) throws IOException
223+
final List<Token> fields,
224+
final List<Token> groups,
225+
final List<Token> varData,
226+
final Token msgToken) throws IOException
209227
{
210-
final Token msgToken = components.messageToken;
211228
final String className = formatClassName(decoderName(msgToken.name()));
212229
final String implementsString = implementsInterface(GEN_MESSAGE_DECODER_FLYWEIGHT);
213230

214231
try (Writer out = outputManager.createOutput(className))
215232
{
216233
out.append(generateMainHeader(ir.applicableNamespace()));
217234

218-
generateAnnotations(indent, className, components.groups, out, 0, this::decoderName);
235+
generateAnnotations(indent, className, groups, out, 0, this::decoderName);
219236
out.append(generateDeclaration(className, implementsString));
220237
out.append(generateDecoderFlyweightCode(className, msgToken));
221-
out.append(generateDecoderFields(components.fields, indent));
238+
out.append(generateDecoderFields(fields, indent));
222239

223240
final StringBuilder sb = new StringBuilder();
224-
generateDecoderGroups(sb, className, components.groups, indent);
241+
generateDecoderGroups(sb, className, groups, indent);
225242
out.append(sb);
226243

227-
out.append(generateDecoderVarData(components.varData, indent));
244+
out.append(generateDecoderVarData(varData, indent));
228245

229-
out.append(generateDecoderDisplay(msgToken.name(), components.fields, components.groups, components.varData,
230-
indent));
246+
out.append(generateDecoderDisplay(msgToken.name(), fields, groups, varData, indent));
231247

232248
out.append("}\n");
233249
}
@@ -2218,6 +2234,24 @@ private CharSequence generateDecoderFields(final List<Token> tokens, final Strin
22182234
return sb;
22192235
}
22202236

2237+
public static void eachField(final List<Token> tokens, final BiConsumer<Token, Token> consumer)
2238+
{
2239+
for (int i = 0, size = tokens.size(); i < size;)
2240+
{
2241+
final Token fieldToken = tokens.get(i);
2242+
if (fieldToken.signal() == Signal.BEGIN_FIELD)
2243+
{
2244+
final Token encodingToken = tokens.get(i + 1);
2245+
consumer.accept(fieldToken, encodingToken);
2246+
i += fieldToken.componentTokenCount();
2247+
}
2248+
else
2249+
{
2250+
++i;
2251+
}
2252+
}
2253+
}
2254+
22212255
private static void generateFieldIdMethod(final StringBuilder sb, final Token token, final String indent)
22222256
{
22232257
sb.append(String.format(

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/rust/NamedToken.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import java.util.ArrayList;
66
import java.util.List;
77

8-
import static uk.co.real_logic.sbe.ir.GenerationUtil.eachField;
8+
import static uk.co.real_logic.sbe.generation.java.JavaGenerator.eachField;
99

1010
final class NamedToken
1111
{

sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/rust/RustGenerator.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,11 @@ public void generate() throws IOException
4545
generateEnums(ir, outputManager);
4646
generateComposites(ir, outputManager);
4747
generateBitSets(ir, outputManager);
48-
final int headerSize = ir.headerStructure().totalByteSize();
48+
final int headerSize = totalByteSize(ir.headerStructure());
4949

5050
for (final List<Token> tokens : ir.messages())
5151
{
52-
final MessageComponents components = GenerationUtil.collectMessageComponents(tokens);
52+
final MessageComponents components = MessageComponents.collectMessageComponents(tokens);
5353
final String messageTypeName = formatTypeName(components.messageToken.name());
5454

5555
final Optional<FieldsRepresentationSummary> fieldsRepresentation =
@@ -66,6 +66,16 @@ public void generate() throws IOException
6666

6767
}
6868

69+
private static int totalByteSize(final HeaderStructure headerStructure)
70+
{
71+
return headerStructure.tokens().stream()
72+
.filter(t -> t.signal() == Signal.ENCODING
73+
|| t.signal() == Signal.BEGIN_ENUM || t.signal() == Signal.BEGIN_SET)
74+
.mapToInt(Token::encodedLength)
75+
.sum();
76+
77+
}
78+
6979
private void generateGroupFieldRepresentations(
7080
final OutputManager outputManager, final List<GroupTreeNode> groupTree) throws IOException
7181
{

sbe-tool/src/main/java/uk/co/real_logic/sbe/ir/GenerationUtil.java

Lines changed: 8 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,7 @@
1515
*/
1616
package uk.co.real_logic.sbe.ir;
1717

18-
import java.util.ArrayList;
1918
import java.util.List;
20-
import java.util.function.BiConsumer;
2119
import java.util.function.Function;
2220

2321
import static java.util.stream.Collectors.joining;
@@ -46,26 +44,8 @@ public static int collectVarData(final List<Token> tokens, final int index, fina
4644
return collect(Signal.BEGIN_VAR_DATA, tokens, index, varData);
4745
}
4846

49-
public static MessageComponents collectMessageComponents(final List<Token> tokens)
50-
{
51-
final Token msgToken = tokens.get(0);
52-
final List<Token> messageBody = getMessageBody(tokens);
53-
54-
int i = 0;
55-
final List<Token> fields = new ArrayList<>();
56-
i = collectFields(messageBody, i, fields);
57-
58-
final List<Token> groups = new ArrayList<>();
59-
i = collectGroups(messageBody, i, groups);
60-
61-
final List<Token> varData = new ArrayList<>();
62-
collectVarData(messageBody, i, varData);
63-
return new MessageComponents(msgToken, fields, groups, varData);
64-
}
65-
66-
6747
public static int collect(
68-
final Signal signal, final List<Token> tokens, final int index, final List<Token> collected)
48+
final Signal signal, final List<Token> tokens, final int index, final List<Token> collected)
6949
{
7050
int i = index;
7151
while (i < tokens.size())
@@ -92,23 +72,23 @@ public static List<Token> getMessageBody(final List<Token> tokens)
9272
}
9373

9474
public static CharSequence concatEncodingTokens(
95-
final List<Token> tokens, final Function<Token, CharSequence> mapper)
75+
final List<Token> tokens, final Function<Token, CharSequence> mapper)
9676
{
9777
return concatTokens(tokens, Signal.ENCODING, mapper);
9878
}
9979

10080
public static CharSequence concatTokens(
101-
final List<Token> tokens, final Signal signal, final Function<Token, CharSequence> mapper)
81+
final List<Token> tokens, final Signal signal, final Function<Token, CharSequence> mapper)
10282
{
10383
return tokens
104-
.stream()
105-
.filter((token) -> token.signal() == signal)
106-
.map(mapper)
107-
.collect(joining());
84+
.stream()
85+
.filter((token) -> token.signal() == signal)
86+
.map(mapper)
87+
.collect(joining());
10888
}
10989

11090
public static int findEndSignal(
111-
final List<Token> tokens, final int startIndex, final Signal signal, final String name)
91+
final List<Token> tokens, final int startIndex, final Signal signal, final String name)
11292
{
11393
int result = tokens.size() - 1;
11494

@@ -125,22 +105,4 @@ public static int findEndSignal(
125105

126106
return result;
127107
}
128-
129-
public static void eachField(final List<Token> tokens, final BiConsumer<Token, Token> consumer)
130-
{
131-
for (int i = 0, size = tokens.size(); i < size;)
132-
{
133-
final Token fieldToken = tokens.get(i);
134-
if (fieldToken.signal() == Signal.BEGIN_FIELD)
135-
{
136-
final Token encodingToken = tokens.get(i + 1);
137-
consumer.accept(fieldToken, encodingToken);
138-
i += fieldToken.componentTokenCount();
139-
}
140-
else
141-
{
142-
++i;
143-
}
144-
}
145-
}
146108
}

0 commit comments

Comments
 (0)