Browse Source

gro, faster atom line handling

Alexander Rose 7 years ago
parent
commit
6fd5e1908b
2 changed files with 16 additions and 8 deletions
  1. 11 8
      src/reader/gro.ts
  2. 5 0
      src/utils/tokens.ts

+ 11 - 8
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));

+ 5 - 0
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,