radio/libjs/wType/string.js
2018-08-05 00:48:17 +03:00

85 lines
2.1 KiB
JavaScript

"use strict";
var Object = require("./object");
var String = Object.inherit({
"className": "String",
"constructor": function(source) {
Object.fn.constructor.call(this);
this._data = "";
this._parseSource(source || "");
},
"destructor": function () {
this.clear();
Object.fn.destructor.call(this);
},
"<": function(other) {
if (!(other instanceof String)) {
throw new Error("Can compare String only with String");
}
return this._data < other._data;
},
">": function(other) {
if (!(other instanceof String)) {
throw new Error("Can compare String only with String");
}
return this._data > other._data;
},
"==": function(other) {
if (this.getType() !== other.getType()) {
return false;
}
return this._data === other._data;
},
"+=": function(str) {
this._data += str.toString();
},
"clear": function() {
this._data = "";
},
"clone": function() {
var clone = new String(this._data);
return clone;
},
"deserialize": function(ba) {
this.clear();
var size = ba.pop32();
for (var i = 0; i < size; ++i) {
var cc = ba.pop16();
this._data += global.String.fromCharCode(cc);
}
},
"length": function() {
return this._data.length;
},
"serialize": function(ba) {
ba.push32(this._data.length);
for (var i = 0; i < this._data.length; ++i) {
var code = this._data.charCodeAt(i);
ba.push16(code);
}
},
"size": function() {
return this._data.length * 2 + 4;
},
"toString": function() {
return this._data;
},
"valueOf": function() {
return this.toString();
},
"_parseSource": function(source) {
if (typeof source !== "string") {
throw new Error("Wrong argument to construct String");
}
this._data = source;
}
});
module.exports = String;