/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2004-2007 1&1 Internet AG, Germany, http://www.1and1.org License: LGPL: http://www.gnu.org/licenses/lgpl.html EPL: http://www.eclipse.org/org/documents/epl-v10.php See the LICENSE file in the project's top-level directory for details. Authors: * Sebastian Werner (wpbasti) * Andreas Ecker (ecker) ************************************************************************ */ /* ************************************************************************ #module(core) #load(qx.core.Init) #resource(static:static) ************************************************************************ */ /** * The qooxdoo root class. All other classes are direct or indirect subclasses of this one. * * This class contains methods for: * * * @param vAutoDispose {Boolean ? true} whether the object should be automatically disposed */ qx.OO.defineClass("qx.core.Object", Object, function(vAutoDispose) { this._hashCode = qx.core.Object._availableHashCode++; if (vAutoDispose !== false) { this._dbKey = qx.core.Object._db.length; qx.core.Object._db.push(this); } }); /* --------------------------------------------------------------------------- DEFAULT SETTINGS --------------------------------------------------------------------------- */ qx.Settings.setDefault("enableDisposerDebug", false); /* ************************************************************************ Class data, properties and methods ************************************************************************ */ qx.Class._availableHashCode = 0; qx.Class._db = []; qx.Class._disposeAll = false; /** * Returns an unique identifier for the given object. If such an identifier * does not yet exist, create it. * * @param o {Object} the Object to get the hashcode for * @return {Integer} unique identifier for the given object */ qx.Class.toHashCode = function(o) { if(o._hashCode != null) { return o._hashCode; } return o._hashCode = qx.core.Object._availableHashCode++; } /** * Destructor. This method is called by qooxdoo on object destruction. * * Any class that holds resources like links to DOM nodes must overwrite * this method and free these resources. */ qx.Class.dispose = function() { // var logger = qx.log.Logger.getClassLogger(qx.core.Object); // logger.debug("Disposing Application"); // var vStart = (new Date).valueOf(); qx.core.Object._disposeAll = true; var vObject; for (var i=qx.core.Object._db.length-1; i>=0; i--) { vObject = qx.core.Object._db[i]; if (vObject && vObject._disposed === false) { // logger.debug("Disposing: " + vObject); vObject.dispose(); } } // logger.debug("Done in: " + ((new Date).valueOf() - vStart) + "ms"); } /** * Summary of allocated objects * * @return {String} summary of allocated objects. */ qx.Class.summary = function() { var vData = {}; var vCounter = 0; var vObject; for (var i=qx.core.Object._db.length-1; i>=0; i--) { vObject = qx.core.Object._db[i]; if (vObject && vObject._disposed === false) { if (vData[vObject.classname] == null) { vData[vObject.classname] = 1; } else { vData[vObject.classname]++; } vCounter++; } } var vArrData = []; for (var vClassName in vData) { vArrData.push({ classname : vClassName, number : vData[vClassName] }); } vArrData.sort(function(a, b) { return b.number - a.number; }); var vMsg = "Summary: (" + vCounter + " Objects)\n\n"; for (var i=0; i