Skip to content

Commit 2d2015d

Browse files
committed
[Java] Update component token counts for types as well as messages.
1 parent 0ef3b06 commit 2d2015d

File tree

1 file changed

+34
-27
lines changed
  • sbe-tool/src/main/java/uk/co/real_logic/sbe/ir

1 file changed

+34
-27
lines changed

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

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ public void addMessage(final long messageId, final List<Token> messageTokens)
107107

108108
captureTypes(messageTokens, 0, messageTokens.size() - 1);
109109
compressConstantEnums(messageTokens);
110-
countComponentTokens(messageTokens);
110+
updateComponentTokenCounts(messageTokens);
111111

112112
messagesByIdMap.put(messageId, new ArrayList<>(messageTokens));
113113
}
@@ -236,6 +236,37 @@ public String applicableNamespace()
236236
return namespaceName == null ? packageName : namespaceName;
237237
}
238238

239+
/**
240+
* Iterate over a list of {@link Token}s and update their counts of how many tokens make up each component.
241+
*
242+
* @param tokens not be updated.
243+
*/
244+
public static void updateComponentTokenCounts(final List<Token> tokens)
245+
{
246+
final Map<String, Deque<Integer>> map = new HashMap<>();
247+
248+
for (int i = 0, size = tokens.size(); i < size; i++)
249+
{
250+
final Token token = tokens.get(i);
251+
final Signal signal = token.signal();
252+
253+
if (signal.name().startsWith("BEGIN_"))
254+
{
255+
final String componentType = signal.name().substring(6);
256+
map.computeIfAbsent(componentType, (key) -> new LinkedList<>()).push(i);
257+
}
258+
else if (signal.name().startsWith("END_"))
259+
{
260+
final String componentType = signal.name().substring(4);
261+
final int beginIndex = map.get(componentType).pop();
262+
263+
final int componentTokenCount = (i - beginIndex) + 1;
264+
tokens.get(beginIndex).componentTokenCount(componentTokenCount);
265+
token.componentTokenCount(componentTokenCount);
266+
}
267+
}
268+
}
269+
239270
private static void compressConstantEnums(final List<Token> tokens)
240271
{
241272
final Iterator<Token> iter = tokens.iterator();
@@ -271,32 +302,6 @@ private static void compressConstantEnums(final List<Token> tokens)
271302
}
272303
}
273304

274-
private static void countComponentTokens(final List<Token> tokens)
275-
{
276-
final Map<String, Deque<Integer>> map = new HashMap<>();
277-
278-
for (int i = 0, size = tokens.size(); i < size; i++)
279-
{
280-
final Token token = tokens.get(i);
281-
final Signal signal = token.signal();
282-
283-
if (signal.name().startsWith("BEGIN_"))
284-
{
285-
final String componentType = signal.name().substring(6);
286-
map.computeIfAbsent(componentType, (key) -> new LinkedList<>()).push(i);
287-
}
288-
else if (signal.name().startsWith("END_"))
289-
{
290-
final String componentType = signal.name().substring(4);
291-
final int beginIndex = map.get(componentType).pop();
292-
293-
final int componentTokenCount = (i - beginIndex) + 1;
294-
tokens.get(beginIndex).componentTokenCount(componentTokenCount);
295-
token.componentTokenCount(componentTokenCount);
296-
}
297-
}
298-
}
299-
300305
private void captureTypes(final List<Token> tokens, final int beginIndex, final int endIndex)
301306
{
302307
for (int i = beginIndex; i <= endIndex; i++)
@@ -336,6 +341,8 @@ private int captureType(final List<Token> tokens, final int index, final Signal
336341
}
337342
while (endSignal != token.signal() || !name.equals(token.name()));
338343

344+
345+
updateComponentTokenCounts(typeTokens);
339346
typesByNameMap.put(name, typeTokens);
340347

341348
return i;

0 commit comments

Comments
 (0)