aboutsummaryrefslogtreecommitdiffstats
path: root/lib/RowSnapshot.jsm
diff options
context:
space:
mode:
authorAlessio Vanni <vannilla@firemail.cc>2020-08-22 17:06:39 +0200
committerJesús <heckyel@hyperbola.info>2022-04-06 04:31:19 +0800
commit415f3d09621bfabfe379a0038ce50d4e887a8f07 (patch)
tree906ffb0304ba447a697002d5cc52ef5cbc3a733a /lib/RowSnapshot.jsm
parent096250c53aebeea35a117143c02893343621d0ad (diff)
downloadematrix-415f3d09621bfabfe379a0038ce50d4e887a8f07.tar.lz
ematrix-415f3d09621bfabfe379a0038ce50d4e887a8f07.tar.xz
ematrix-415f3d09621bfabfe379a0038ce50d4e887a8f07.zip
Move RowSnapshot into a module Preparation for future changes
Signed-off-by: Jesús <heckyel@hyperbola.info>
Diffstat (limited to 'lib/RowSnapshot.jsm')
-rw-r--r--lib/RowSnapshot.jsm58
1 files changed, 58 insertions, 0 deletions
diff --git a/lib/RowSnapshot.jsm b/lib/RowSnapshot.jsm
new file mode 100644
index 0000000..edc6bc9
--- /dev/null
+++ b/lib/RowSnapshot.jsm
@@ -0,0 +1,58 @@
+/*******************************************************************************
+
+ ηMatrix - a browser extension to black/white list requests.
+ Copyright (C) 2014-2019 Raymond Hill
+ Copyright (C) 2019-2020 Alessio Vanni
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see {http://www.gnu.org/licenses/}.
+
+ Home: https://gitlab.com/vannilla/ematrix
+ uMatrix Home: https://github.com/gorhill/uMatrix
+*/
+
+'use strict';
+
+// Apparently, for this specific data structure using a constructor is
+// faster than an object literal.
+// I don't really believe it, but let's keep things as they are.
+// Now a module to keep things more organized (might make things slower.)
+
+var EXPORTED_SYMBOLS = ['RowSnapshot'];
+
+var RowSnapshot = function (matrix, src, dest, domain) {
+ this.domain = domain;
+ this.temporary = matrix.tMatrix.evaluateRowZXY(src, dest);
+ this.permanent = matrix.pMatrix.evaluateRowZXY(src, dest);
+ this.counts = RowSnapshot.counts(matrix).slice();
+ this.totals = RowSnapshot.counts(matrix).slice();
+};
+
+RowSnapshot.memoizedCounts = undefined;
+
+RowSnapshot.counts = function (matrix) {
+ if (RowSnapshot.memoizedCounts !== undefined) {
+ return RowSnapshot.memoizedCounts;
+ }
+
+ let aa = [];
+ let n = matrix.Matrix.columnHeaderIndices.size;
+
+ for (let i=0; i<n; ++i) {
+ aa[i] = 0;
+ }
+
+ RowSnapshot.memoizedCounts = aa;
+
+ return aa;
+};