UNPKG

molstar

Version:

A comprehensive macromolecular library.

160 lines (159 loc) 5.74 kB
"use strict"; /** * Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info. * * Adapted from CIFTools.js (https://github.com/dsehnal/CIFTools.js) * * @author David Sehnal <david.sehnal@gmail.com> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.StringBuilder = void 0; var StringBuilder; (function (StringBuilder) { function create(chunkCapacity = 512) { return { current: [], offset: 0, capacity: chunkCapacity, chunks: [] }; } StringBuilder.create = create; function getString(builder) { if (!builder.chunks.length) { if (builder.current.length === builder.offset) return builder.current.join(''); return builder.current.splice(0, builder.offset).join(''); } if (builder.offset > 0) { builder.chunks[builder.chunks.length] = builder.current.length === builder.offset ? builder.current.join('') : builder.current.slice(0, builder.offset).join(''); } return builder.chunks.join(''); } StringBuilder.getString = getString; function getSize(builder) { let size = 0; for (const c of builder.chunks) size += c.length; for (let i = 0; i < builder.offset; i++) size += builder.current[i].length; return size; } StringBuilder.getSize = getSize; function getChunks(builder) { if (builder.offset > 0) { if (builder.current.length === builder.offset) builder.chunks[builder.chunks.length] = builder.current.join(''); else builder.chunks[builder.chunks.length] = builder.current.slice(0, builder.offset).join(''); builder.offset = 0; } return builder.chunks; } StringBuilder.getChunks = getChunks; const __paddingSpaces = []; (function () { let s = ''; for (let i = 0; i < 512 /* PaddingSpaces.Count */; i++) { __paddingSpaces[i] = s; s = s + ' '; } })(); function newline(builder) { writeSafe(builder, '\n'); } StringBuilder.newline = newline; function whitespace(builder, len) { if (len > 0) writeSafe(builder, __paddingSpaces[len]); } StringBuilder.whitespace = whitespace; function whitespace1(builder) { writeSafe(builder, ' '); } StringBuilder.whitespace1 = whitespace1; function write(builder, val) { if (!val) return; if (builder.offset === builder.capacity) { builder.chunks[builder.chunks.length] = builder.current.join(''); builder.offset = 0; } builder.current[builder.offset++] = val; } StringBuilder.write = write; /** Write without check. */ function writeSafe(builder, val) { if (builder.offset === builder.capacity) { builder.chunks[builder.chunks.length] = builder.current.join(''); builder.offset = 0; } builder.current[builder.offset++] = val; } StringBuilder.writeSafe = writeSafe; function writePadLeft(builder, val, totalWidth) { if (!val) { whitespace(builder, totalWidth); return; } const padding = totalWidth - val.length; whitespace(builder, padding); writeSafe(builder, val); } StringBuilder.writePadLeft = writePadLeft; function writePadRight(builder, val, totalWidth) { if (!val) { whitespace(builder, totalWidth); return; } const padding = totalWidth - val.length; writeSafe(builder, val); whitespace(builder, padding); } StringBuilder.writePadRight = writePadRight; function writeInteger(builder, val) { writeSafe(builder, '' + val); } StringBuilder.writeInteger = writeInteger; function writeIntegerAndSpace(builder, val) { writeSafe(builder, '' + val + ' '); } StringBuilder.writeIntegerAndSpace = writeIntegerAndSpace; function writeIntegerPadLeft(builder, val, totalWidth) { const s = '' + val; const padding = totalWidth - s.length; whitespace(builder, padding); writeSafe(builder, s); } StringBuilder.writeIntegerPadLeft = writeIntegerPadLeft; function writeIntegerPadRight(builder, val, totalWidth) { const s = '' + val; const padding = totalWidth - s.length; writeSafe(builder, s); whitespace(builder, padding); } StringBuilder.writeIntegerPadRight = writeIntegerPadRight; /** * @example writeFloat(123.2123, 100) -- 2 decim */ function writeFloat(builder, val, precisionMultiplier) { writeSafe(builder, '' + Math.round(precisionMultiplier * val) / precisionMultiplier); } StringBuilder.writeFloat = writeFloat; function writeFloatPadLeft(builder, val, precisionMultiplier, totalWidth) { const s = '' + Math.round(precisionMultiplier * val) / precisionMultiplier; const padding = totalWidth - s.length; whitespace(builder, padding); writeSafe(builder, s); } StringBuilder.writeFloatPadLeft = writeFloatPadLeft; function writeFloatPadRight(builder, val, precisionMultiplier, totalWidth) { const s = '' + Math.round(precisionMultiplier * val) / precisionMultiplier; const padding = totalWidth - s.length; writeSafe(builder, s); whitespace(builder, padding); } StringBuilder.writeFloatPadRight = writeFloatPadRight; })(StringBuilder || (exports.StringBuilder = StringBuilder = {}));