aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile3
-rw-r--r--lib/RowSnapshot.jsm58
2 files changed, 60 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index 0a3cec5..b1dd2bd 100644
--- a/Makefile
+++ b/Makefile
@@ -100,7 +100,8 @@ IMG := $(IMGICON) $(IMGOTHER)
LIB := lib/PublicSuffixList.jsm lib/Punycode.jsm lib/FrameModule.jsm \
lib/CallbackWrapper.jsm lib/HttpRequestHeaders.jsm \
lib/PendingRequests.jsm lib/CookieCache.jsm lib/UriTools.jsm \
- lib/LiquidDict.jsm lib/HostMap.jsm lib/Tools.jsm
+ lib/LiquidDict.jsm lib/HostMap.jsm lib/Tools.jsm \
+ lib/RowSnapshot.jsm
# The locale folder is split into parts because it's a long list
# and it's somewhat easier to read this way
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;
+};