%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/tools/system-analyzer/
Upload File :
Create Path :
Current File : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/tools/system-analyzer/helper.mjs

// Copyright 2020 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

export class Group {
  constructor(key, id, parentTotal, entries, length = 0) {
    this.key = key;
    this.id = id;
    this.entries = entries;
    this.length = length || entries.length;
    this.parentTotal = parentTotal;
  }

  get percent() {
    return this.length / this.parentTotal * 100;
  }

  add() {
    this.length++;
  }

  addEntry(entry) {
    this.length++;
    this.entries.push(entry);
  }
}

export function groupBy(array, keyFunction, collect = false) {
  if (array.length === 0) return [];
  if (keyFunction === undefined) keyFunction = each => each;
  const keyToGroup = new Map();
  const groups = [];
  const sharedEmptyArray = [];
  let id = 0;
  // This is performance critical, resorting to for-loop
  for (let each of array) {
    const key = keyFunction(each);
    let group = keyToGroup.get(key);
    if (group !== undefined) {
      collect ? group.addEntry(each) : group.add();
      continue;
    }
    let entries = collect ? [each] : sharedEmptyArray;
    group = new Group(key, id++, array.length, entries, 1);
    groups.push(group);
    keyToGroup.set(key, group);
  }
  // Sort by length
  return groups.sort((a, b) => b.length - a.length);
}

export function arrayEquals(left, right, compareFn) {
  if (left == right) return true;
  if (left.length != right.length) return false;
  if (compareFn === undefined) {
    for (let i = 0; i < left.length; i++) {
      if (left[i] != right[i]) return false;
    }
  } else {
    for (let i = 0; i < left.length; i++) {
      if (!compareFn(left[i], right[i])) return false;
    }
  }
  return true;
}

export function entriesEquals(left, right) {
  if (left == right) return true;
  if (left == undefined) return right == undefined;
  const leftEntries = Object.entries(left);
  const rightEntries = Object.entries(right);
  if (leftEntries.length !== rightEntries.length) return false;
  for (let i = 0; i < leftEntries.length; i++) {
    const l = leftEntries[i];
    const r = rightEntries[i];
    if (l[0] != r[0]) return false;
    if (l[1] != r[1]) return false;
  }
  return true;
}

export function keysEquals(left, right) {
  if (left == right) return true;
  if (left == undefined) return right == undefined;
  return arrayEquals(Object.keys(left), Object.keys(right));
}

export * from '../js/helper.mjs'

Zerion Mini Shell 1.0