diff --git a/src/reader/gro.ts b/src/reader/gro.ts index 966da0c959e5646fc625b0f260dc825243b0273a..3bf31ce033196a8f082751889c2cc4b9d50987f0 100644 --- a/src/reader/gro.ts +++ b/src/reader/gro.ts @@ -193,25 +193,28 @@ function handleAtoms (state: GroState, block: GroBlock) { const columnCount = columns.length const tokens = Tokens.create(state.numberOfAtoms * 2 * columnCount) + let start: number + let end: number + let valueStart: number + let valueEnd: number = state.position + for (let i = 0; i < state.numberOfAtoms; ++i) { state.currentTokenStart = state.position - eatLine(state) - // console.log('atom line', state.data.substring(state.currentTokenStart, state.currentTokenEnd)) - - let start: number - let end = state.currentTokenStart + end = state.currentTokenStart for (let j = 0; j < columnCount; ++j) { start = end end = start + fieldSizes[j] // trim - let valueStart = start - let valueEnd = end + valueStart = start + valueEnd = end while (valueStart < valueEnd && state.data.charCodeAt(valueStart) === 32) ++valueStart; while (valueEnd > valueStart && state.data.charCodeAt(valueEnd - 1) === 32) --valueEnd; - Tokens.add(tokens, valueStart, valueEnd) + Tokens.addUnchecked(tokens, valueStart, valueEnd) } + state.position = valueEnd + eatLine(state) } block.addTable(new TextTable(state.data, name, columns, tokens)); diff --git a/src/utils/tokens.ts b/src/utils/tokens.ts index 93af43bb6d21c86d635761e3a10205db36029bb9..32e1a207d67af59eabaa0c7a45137875fb5c58b2 100644 --- a/src/utils/tokens.ts +++ b/src/utils/tokens.ts @@ -25,6 +25,11 @@ export namespace Tokens { tokens.indices[tokens.count++] = end; } + export function addUnchecked(tokens: Tokens, start: number, end: number) { + tokens.indices[tokens.count++] = start; + tokens.indices[tokens.count++] = end; + } + export function create(size: number): Tokens { return { indicesLenMinus2: (size - 2) | 0,