Mon 21 Jul 22:43:21 CEST 2025
This commit is contained in:
parent
46df1822a9
commit
838f6c0e55
78
js/dos/ext/sizeof.js
Normal file
78
js/dos/ext/sizeof.js
Normal file
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user