Index: lib/subscriptionClasses.js |
=================================================================== |
--- a/lib/subscriptionClasses.js |
+++ b/lib/subscriptionClasses.js |
@@ -62,16 +62,23 @@ |
/** |
* Filter text contained in the filter subscription. |
* @type {Array.<string>} |
* @private |
*/ |
_filterText: null, |
+ /** |
+ * A searchable index of filter text in the filter subscription. |
Manish Jethani
2019/02/26 12:29:57
We might be able to find a better way to do this t
|
+ * @type {?Set.<string>} |
+ * @private |
+ */ |
+ _filterTextIndex: null, |
+ |
_title: null, |
_fixedTitle: false, |
_disabled: false, |
/** |
* Title of the filter subscription |
* @type {string} |
*/ |
@@ -142,83 +149,102 @@ |
* @yields {string} |
*/ |
*filterText() |
{ |
yield* this._filterText; |
}, |
/** |
+ * Checks whether the subscription has the given filter text. |
+ * @param {string} filterText |
+ * @returns {boolean} |
+ * @package |
+ */ |
+ hasFilterText(filterText) |
+ { |
+ if (!this._filterTextIndex) |
Manish Jethani
2019/02/26 12:29:57
We build the index on first call. Unfortunately we
|
+ this._filterTextIndex = new Set(this._filterText); |
+ |
+ return this._filterTextIndex.has(filterText); |
+ }, |
+ |
+ /** |
* Returns the filter text at the given 0-based index. |
* @param {number} index |
* @returns {?Filter} |
*/ |
filterTextAt(index) |
{ |
return this._filterText[index] || null; |
}, |
/** |
* Returns the 0-based index of the given filter. |
* @param {Filter} filter |
* @param {number} [fromIndex] The index from which to start the search. |
* @return {number} |
*/ |
- searchFilter(filter, fromIndex = 0) |
+ findFilterIndex(filter, fromIndex = 0) |
Manish Jethani
2019/02/26 12:29:57
While we're at it, let's rename this function to s
|
{ |
return this._filterText.indexOf(filter.text, fromIndex); |
}, |
/** |
* Removes all filters from the subscription. |
*/ |
clearFilters() |
{ |
this._filterText = []; |
+ this._filterTextIndex = null; |
}, |
/** |
* Adds a filter to the subscription. |
* @param {Filter} filter |
*/ |
addFilter(filter) |
{ |
this._filterText.push(filter.text); |
+ this._filterTextIndex = null; |
hub
2019/03/08 21:36:19
Shouldn't it be more efficiant that we add the `fi
Manish Jethani
2019/03/30 20:50:35
Adding it right away would mean more memory usage
|
}, |
/** |
* Adds a filter to the subscription. |
* @param {string} filterText |
*/ |
addFilterText(filterText) |
{ |
this._filterText.push(filterText); |
+ this._filterTextIndex = null; |
}, |
/** |
* Inserts a filter into the subscription. |
* @param {Filter} filter |
* @param {number} index The index at which to insert the filter. |
*/ |
insertFilterAt(filter, index) |
{ |
this._filterText.splice(index, 0, filter.text); |
+ this._filterTextIndex = null; |
}, |
/** |
* Deletes a filter from the subscription. |
* @param {number} index The index at which to delete the filter. |
*/ |
deleteFilterAt(index) |
{ |
// Ignore index if out of bounds on the negative side, for consistency. |
if (index < 0) |
return; |
this._filterText.splice(index, 1); |
+ this._filterTextIndex = null; |
}, |
/** |
* Serializes the subscription for writing out on disk. |
* @yields {string} |
*/ |
*serialize() |
{ |