PHP 8.2.30
Preview: Array.js Size: 2.43 KB
/home/byroehnu/easepaybiz.easetack.com/node_modules/restructure/src/Array.js

import {Base} from './Base.js';
import {Number as NumberT} from './Number.js';
import * as utils from './utils.js';

class ArrayT extends Base {
  constructor(type, length, lengthType = 'count') {
    super();
    this.type = type;
    this.length = length;
    this.lengthType = lengthType;
  }

  decode(stream, parent) {
    let length;
    const { pos } = stream;

    const res = [];
    let ctx = parent;

    if (this.length != null) {
      length = utils.resolveLength(this.length, stream, parent);
    }

    if (this.length instanceof NumberT) {
      // define hidden properties
      Object.defineProperties(res, {
        parent:         { value: parent },
        _startOffset:   { value: pos },
        _currentOffset: { value: 0, writable: true },
        _length:        { value: length }
      });

      ctx = res;
    }

    if ((length == null) || (this.lengthType === 'bytes')) {
      const target = (length != null) ?
        stream.pos + length
      : (parent != null ? parent._length : undefined) ?
        parent._startOffset + parent._length
      :
        stream.length;

      while (stream.pos < target) {
        res.push(this.type.decode(stream, ctx));
      }

    } else {
      for (let i = 0, end = length; i < end; i++) {
        res.push(this.type.decode(stream, ctx));
      }
    }

    return res;
  }

  size(array, ctx, includePointers = true) {
    if (!array) {
      return this.type.size(null, ctx) * utils.resolveLength(this.length, null, ctx);
    }

    let size = 0;
    if (this.length instanceof NumberT) {
      size += this.length.size();
      ctx = {parent: ctx, pointerSize: 0};
    }

    for (let item of array) {
      size += this.type.size(item, ctx);
    }

    if (ctx && includePointers && this.length instanceof NumberT) {
      size += ctx.pointerSize;
    }
    
    return size;
  }

  encode(stream, array, parent) {
    let ctx = parent;
    if (this.length instanceof NumberT) {
      ctx = {
        pointers: [],
        startOffset: stream.pos,
        parent
      };

      ctx.pointerOffset = stream.pos + this.size(array, ctx, false);
      this.length.encode(stream, array.length);
    }

    for (let item of array) {
      this.type.encode(stream, item, ctx);
    }

    if (this.length instanceof NumberT) {
      let i = 0;
      while (i < ctx.pointers.length) {
        const ptr = ctx.pointers[i++];
        ptr.type.encode(stream, ptr.val, ptr.parent);
      }
    }
  }
}

export {ArrayT as Array};

Directory Contents

Dirs: 0 × Files: 18

Name Size Perms Modified Actions
127 B lr--r--r-- 2026-03-14 01:49:07
Edit Download
2.43 KB lrw-r--r-- 2026-03-05 00:19:58
Edit Download
412 B lrw-r--r-- 2026-03-05 00:19:59
Edit Download
741 B lrw-r--r-- 2026-03-05 00:19:59
Edit Download
398 B lrw-r--r-- 2026-03-05 00:20:01
Edit Download
795 B lrw-r--r-- 2026-03-05 00:20:02
Edit Download
1.85 KB lrw-r--r-- 2026-03-05 00:20:03
Edit Download
3.13 KB lrw-r--r-- 2026-03-05 00:20:04
Edit Download
533 B lrw-r--r-- 2026-03-05 00:20:05
Edit Download
1.62 KB lrw-r--r-- 2026-03-05 00:20:07
Edit Download
2.23 KB lrw-r--r-- 2026-03-05 00:20:08
Edit Download
920 B lrw-r--r-- 2026-03-05 00:20:09
Edit Download
4.09 KB lrw-r--r-- 2026-03-05 00:20:09
Edit Download
519 B lrw-r--r-- 2026-03-05 00:20:10
Edit Download
3.71 KB lrw-r--r-- 2026-03-05 00:20:10
Edit Download
2.33 KB lrw-r--r-- 2026-03-05 00:20:11
Edit Download
723 B lrw-r--r-- 2026-03-05 00:20:11
Edit Download
3.01 KB lrw-r--r-- 2026-03-05 00:20:11
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).