/* ************************************************************************
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:
*
* - object management (creation and destruction)
* - logging & debugging
* - generic getter/setter
* - user data
* - settings
* - internationalization
*
*
* @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