From 838f6c0e55bcf65c798b50aa7a7f8dfb1b5b05b1 Mon Sep 17 00:00:00 2001 From: sbosse Date: Mon, 21 Jul 2025 22:48:14 +0200 Subject: [PATCH] Mon 21 Jul 22:43:21 CEST 2025 --- js/dos/ext/sizeof.js | 78 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 js/dos/ext/sizeof.js diff --git a/js/dos/ext/sizeof.js b/js/dos/ext/sizeof.js new file mode 100644 index 0000000..2d0c559 --- /dev/null +++ b/js/dos/ext/sizeof.js @@ -0,0 +1,78 @@ +/* + +sizeof.js + +A function to calculate the approximate memory usage of objects + +Created by Stephen Morley - http://code.stephenmorley.org/ - and released under +the terms of the CC0 1.0 Universal legal code: + +http://creativecommons.org/publicdomain/zero/1.0/legalcode + +*/ + +/* Returns the approximate memory usage, in bytes, of the specified object. The + * parameter is: + * + * object - the object whose size should be determined + */ +function sizeof(object){ + + // initialise the list of objects and size + var objects = [object]; + var size = 0; + + // loop over the objects + for (var index = 0; index < objects.length; index ++){ + + // determine the type of the object + switch (typeof objects[index]){ + + // the object is a boolean + case 'boolean': size += 4; break; + + // the object is a number + case 'number': size += 8; break; + + // the object is a string + case 'string': size += 2 * objects[index].length; break; + + // the object is a generic object + case 'object': + + // if the object is not an array, add the sizes of the keys + if (Object.prototype.toString.call(objects[index]) != '[object Array]'){ + for (var key in objects[index]) size += 2 * key.length; + } + + // loop over the keys + for (var key in objects[index]){ + + // determine whether the value has already been processed + var processed = false; + for (var search = 0; search < objects.length; search ++){ + if (objects[search] === objects[index][key]){ + processed = true; + break; + } + } + + // queue the value to be processed if appropriate + if (!processed) objects.push(objects[index][key]); + + } + + } + + } + + // return the calculated size + return size; + +} +module.exports = { + + f: function (obj) { + return sizeof(obj) + } +}