initial commit
This commit is contained in:
commit
4b60ece582
327 changed files with 28286 additions and 0 deletions
155
libjs/wType/vocabulary.js
Normal file
155
libjs/wType/vocabulary.js
Normal file
|
@ -0,0 +1,155 @@
|
|||
"use strict";
|
||||
var Object = require("./object");
|
||||
var String = require("./string");
|
||||
|
||||
var Vocabulary = Object.inherit({
|
||||
"className": "Vocabulary",
|
||||
"constructor": function() {
|
||||
Object.fn.constructor.call(this);
|
||||
|
||||
this._data = global.Object.create(null);
|
||||
this._length = 0;
|
||||
},
|
||||
"destructor": function() {
|
||||
this.clear();
|
||||
|
||||
Object.fn.destructor.call(this);
|
||||
},
|
||||
"==": function(other) {
|
||||
if (this.getType() !== other.getType()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (this._length !== other._length) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var keysMe = this.getKeys();
|
||||
var key;
|
||||
var mValue;
|
||||
var oValue;
|
||||
|
||||
for (var i = 0; i < this._length; ++i) {
|
||||
key = keysMe[i];
|
||||
oValue = other._data[key];
|
||||
if (oValue === undefined) {
|
||||
return false;
|
||||
}
|
||||
mValue = this._data[key];
|
||||
if (!oValue["=="](mValue)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
},
|
||||
"at": function(str) {
|
||||
return this._data[str];
|
||||
},
|
||||
"clear": function() {
|
||||
for (var key in this._data) {
|
||||
this._data[key].destructor();
|
||||
}
|
||||
|
||||
this._data = global.Object.create(null);
|
||||
this._length = 0;
|
||||
},
|
||||
"clone": function() {
|
||||
var clone = new Vocabulary();
|
||||
|
||||
for (var key in this._data) {
|
||||
clone._data[key] = this._data[key].clone();
|
||||
}
|
||||
clone._length = this._length;
|
||||
|
||||
return clone;
|
||||
},
|
||||
"deserialize": function(ba) {
|
||||
this.clear();
|
||||
|
||||
this._length = ba.pop32()
|
||||
|
||||
for (var i = 0; i < this._length; ++i) {
|
||||
var key = new String();
|
||||
key.deserialize(ba);
|
||||
|
||||
var value = Object.fromByteArray(ba);
|
||||
this._data[key.toString()] = value;
|
||||
}
|
||||
},
|
||||
"erase": function(key) {
|
||||
var value = this._data[key];
|
||||
if (value === undefined) {
|
||||
throw new Error("An attempt to erase not existing object from vocabulary");
|
||||
}
|
||||
value.destructor();
|
||||
delete this._data[key];
|
||||
--this._length;
|
||||
},
|
||||
"getKeys": function() {
|
||||
return global.Object.keys(this._data);
|
||||
},
|
||||
"has": function(key) {
|
||||
return this._data[key] instanceof Object;
|
||||
},
|
||||
"insert": function(key, value) {
|
||||
if (!(value instanceof Object)) {
|
||||
throw new Error("An attempt to insert not a W::Object into vocabulary");
|
||||
}
|
||||
var oldValue = this._data[key];
|
||||
if (oldValue !== undefined) {
|
||||
oldValue.destructor();
|
||||
--this._length;
|
||||
}
|
||||
this._data[key] = value
|
||||
|
||||
++this._length;
|
||||
},
|
||||
"length": function() {
|
||||
return this._length;
|
||||
},
|
||||
"serialize": function(ba) {
|
||||
ba.push32(this._length);
|
||||
|
||||
for (var key in this._data) {
|
||||
var sKey = new String(key);
|
||||
var value = this._data[key];
|
||||
|
||||
sKey.serialize(ba);
|
||||
ba.push8(value.getType());
|
||||
value.serialize(ba);
|
||||
}
|
||||
},
|
||||
"size": function() {
|
||||
var size = 4;
|
||||
|
||||
for (var key in this._data) {
|
||||
var sKey = new String(key);
|
||||
var value = this._data[key];
|
||||
|
||||
size += sKey.size();
|
||||
size += value.size() + 1;
|
||||
}
|
||||
|
||||
return size;
|
||||
},
|
||||
"toString": function() {
|
||||
var str = "{";
|
||||
|
||||
var ft = true;
|
||||
|
||||
for (var key in this._data) {
|
||||
if (ft) {
|
||||
ft = false;
|
||||
} else {
|
||||
str += ", ";
|
||||
}
|
||||
str += key + ": ";
|
||||
str += this._data[key].toString();
|
||||
|
||||
}
|
||||
str += "}";
|
||||
return str;
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = Vocabulary;
|
Loading…
Add table
Add a link
Reference in a new issue