forked from po-devs/po-server-goodies
-
Notifications
You must be signed in to change notification settings - Fork 0
/
memoryhash.js
92 lines (82 loc) · 1.98 KB
/
memoryhash.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/*
* Prototype: MemoryHash
* Functions:
* - add(key,value)
* - get(key)
* - remove(key)
* - removeIf(callBack)
* - clear()
* - save()
* - escapeValue(val)
*
* All keys and values must be strings.
*/
function MemoryHash(filename)
{
this.hash = {};
this.fname = filename;
var contents = sys.getFileContent(this.fname);
if (contents !== undefined) {
var lines = contents.split("\n");
for(var i = 0; i < lines.length; ++i) {
var line = lines[i];
var key_value = line.split("*");
var key = key_value[0];
var value = key_value[1];
if (key.length > 0) {
if (value === undefined)
value = '';
this.hash[key] = value;
}
}
}
}
MemoryHash.prototype.add = function(key, value)
{
this.hash[key] = value;
// it doesn't matter if we add a duplicate,
// when we remove something eventually,
// duplicates will be deleted
sys.appendToFile(this.fname, key +'*' + value + '\n');
}
MemoryHash.prototype.get = function(key)
{
return this.hash[key];
}
MemoryHash.prototype.remove = function(key)
{
delete this.hash[key];
this.save();
}
MemoryHash.prototype.removeIf = function(test)
{
var i;
var toDelete = []
for (i in this.hash) {
if (test(this, i)) {
toDelete.push(i);
}
}
for (i in toDelete) {
delete this.hash[toDelete[i]];
}
}
MemoryHash.prototype.clear = function()
{
this.hash = {};
this.save();
}
MemoryHash.prototype.save = function()
{
var lines = [];
for (var i in this.hash) {
lines.push(i +'*' + this.hash[i] + '\n');
}
sys.writeToFile(this.fname, lines.join(""))
}
MemoryHash.prototype.escapeValue = function(value)
{
return value.replace(/\*\n/g,'');
}
/* End of prototype MemoryHash */
exports.MemoryHash = MemoryHash;