Skip to content
Snippets Groups Projects
Commit 6fd5e190 authored by Alexander Rose's avatar Alexander Rose
Browse files

gro, faster atom line handling

parent 07c3377d
No related branches found
No related tags found
No related merge requests found
...@@ -193,25 +193,28 @@ function handleAtoms (state: GroState, block: GroBlock) { ...@@ -193,25 +193,28 @@ function handleAtoms (state: GroState, block: GroBlock) {
const columnCount = columns.length const columnCount = columns.length
const tokens = Tokens.create(state.numberOfAtoms * 2 * columnCount) 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) { for (let i = 0; i < state.numberOfAtoms; ++i) {
state.currentTokenStart = state.position state.currentTokenStart = state.position
eatLine(state) end = state.currentTokenStart
// console.log('atom line', state.data.substring(state.currentTokenStart, state.currentTokenEnd))
let start: number
let end = state.currentTokenStart
for (let j = 0; j < columnCount; ++j) { for (let j = 0; j < columnCount; ++j) {
start = end start = end
end = start + fieldSizes[j] end = start + fieldSizes[j]
// trim // trim
let valueStart = start valueStart = start
let valueEnd = end valueEnd = end
while (valueStart < valueEnd && state.data.charCodeAt(valueStart) === 32) ++valueStart; while (valueStart < valueEnd && state.data.charCodeAt(valueStart) === 32) ++valueStart;
while (valueEnd > valueStart && state.data.charCodeAt(valueEnd - 1) === 32) --valueEnd; 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)); block.addTable(new TextTable(state.data, name, columns, tokens));
......
...@@ -25,6 +25,11 @@ export namespace Tokens { ...@@ -25,6 +25,11 @@ export namespace Tokens {
tokens.indices[tokens.count++] = end; 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 { export function create(size: number): Tokens {
return { return {
indicesLenMinus2: (size - 2) | 0, indicesLenMinus2: (size - 2) | 0,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment