-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDataStore.js
104 lines (86 loc) · 3 KB
/
DataStore.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
93
94
95
96
97
98
99
100
101
102
103
104
Dave_js.DataStore = (function DataStoreFactory() {
var sets = [];
function DataStore() {
this.id = sets.length;
//initialize the data set
sets[this.id] = {
'name' : '',
'vars' : {}
};
}
DataStore.prototype.setName = function setName(name) {
sets[this.id].name = name;
};
DataStore.prototype.addJSONData = function addJSONData(jsonData, index) {
var
var_i, pnt_i, length, keyedData, varData, indexData, key, num,
numberData, min, max, converter, sigFig_i, labelLength, sigFigs,
defaultConverter = Dave_js.Converters.default,
dataSetVars = sets[this.id].vars;
jsonData = jsonData || {};
indexData = (jsonData[index] || []).slice();
for (var_i in jsonData) {
if (jsonData.hasOwnProperty(var_i)) {
varData = jsonData[var_i] || [];
length = varData.length;
converter = Dave_js.Converters[var_i] || defaultConverter;
labelLength = [];
sigFigs = [];
//create a hash of data points whose keys are the index variable
keyedData = {};
numberData = [];
for (pnt_i = 0; pnt_i < length; pnt_i++) {
key = indexData[pnt_i];
if (key === "" || (typeof key != "string" && typeof key != "number")){
//if there is no index, just use the order in which the data arrived
key = indexData[pnt_i] = pnt_i;
}
keyedData[key] = varData[pnt_i];
//save the length of the converted label and significant figures
sigFig_i = Dave_js.Utils.getSigFigs(varData[pnt_i]);
sigFigs.push(sigFig_i);
labelLength.push(('' + converter(varData[pnt_i], sigFig_i)).length);
}
numberData = varData.filter(Dave_js.Utils.isNumber);
min = Math.min.apply(null, numberData);
max = Math.max.apply(null, numberData);
//save the indexed data and some statistics to the DataStore object
dataSetVars[var_i] = {
data: keyedData,
keys: indexData,
length: indexData.length,
min: min,
max: max,
labelLength:
Math.max.apply(null, labelLength.filter(Dave_js.Utils.isNumber)),
sigFigs:
Math.max.apply(null, sigFigs.filter(Dave_js.Utils.isNumber)),
constant: min == max ? true: false,
converter: converter
};
}
}
};
DataStore.prototype.listVars = function listVars() {
var
var_i,
vars = [],
dataSetVars = sets[this.id].vars;
for (var_i in dataSetVars) {
if (dataSetVars.hasOwnProperty(var_i)) {
vars.push(var_i);
}
}
return vars;
};
DataStore.prototype.hasVar = function hasVar(varName) {
return typeof sets[this.id].vars[varName] == "object" ? true : false;
};
DataStore.prototype.getVar = function getVar(varName) {
return this.hasVar(varName) ? sets[this.id].vars[varName] : null;
};
DataStore.prototype.destroy = function destroy() {
delete sets[this.id];
};
return DataStore;
})();