@qooxdoo/framework
Version:
The JS Framework for Coders
136 lines (111 loc) • 3.37 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2004-2008 1&1 Internet AG, Germany, http://www.1und1.de
License:
MIT: https://opensource.org/licenses/MIT
See the LICENSE file in the project's top-level directory for details.
Authors:
* Sebastian Werner (wpbasti)
************************************************************************ */
/**
* A string builder class
*
* += operator is faster in Firefox and Opera.
* Array push/join is faster in Internet Explorer
*
* Even with this wrapper, which costs some time, this is
* faster in Firefox than the alternative Array concat in
* all browsers (which is in relation to IE's performance issues
* only marginal). The IE performance loss caused by this
* wrapper is not relevant.
*
* So this class seems to be the best compromise to handle
* string concatenation.
*/
qx.Class.define("qx.util.StringBuilder",
{
extend : qx.type.BaseArray,
/*
*****************************************************************************
CONSTRUCTOR
*****************************************************************************
*/
/**
* Creates a new StringBuilder with the given length or as a concatenation of the given arguments substrings.
*
* <pre class="javascript">
* var sb1 = new qx.util.StringBuilder(length);
* var sb2 = new qx.util.StringBuilder(item0, item1, ..., itemN);
* </pre>
*
*
* * <code>length</code>: The initial length of the StringBuilder.
* * <code>itemN</code>: A substring that will make up the newly created StringBuilder.
* The StringBuilder's length property is set to the number of arguments.
*
* @param length_or_items {Integer|var?null} The initial length of the StringBuilder
* OR an argument list of values.
*/
construct : function(length_or_items) {
qx.type.BaseArray.apply(this, arguments);
},
/*
*****************************************************************************
MEMBERS
*****************************************************************************
*/
members :
{
/**
* Removes all content
*
*/
clear : function() {
this.length = 0;
},
/**
* Returns the concatted strings.
*
* @return {String} Concatted strings
*/
get : function() {
return this.join("");
},
/**
* Adds new strings. Supports multiple arguments.
*
* @signature function(varargs)
* @param varargs {String} The separate strings to add
*/
add : null,
/**
* Whether the string builder is empty
*
* @return {Boolean} <code>true</code> when the builder is empty
*/
isEmpty : function() {
return this.length === 0;
},
/**
* Returns the size of the strings
*
* @return {Integer} The string length
*/
size : function(){
return this.join("").length;
}
},
/*
*****************************************************************************
DEFER
*****************************************************************************
*/
defer : function(statics, members)
{
members.add = members.push;
members.toString = members.get;
members.valueOf = members.get;
}
});