| Index: lib/filterClasses.js |
| =================================================================== |
| --- a/lib/filterClasses.js |
| +++ b/lib/filterClasses.js |
| @@ -35,44 +35,82 @@ |
| * Abstract base class for filters |
| * |
| * @param {string} text string representation of the filter |
| * @constructor |
| */ |
| function Filter(text) |
| { |
| this.text = text; |
| - this.subscriptions = new Set(); |
| + |
| + /** |
| + * Subscriptions to which this filter belongs. |
| + * @type {Set.<Subscription>} |
| + * @private |
| + */ |
| + this._subscriptions = new Set(); |
| } |
| exports.Filter = Filter; |
| Filter.prototype = |
| { |
| /** |
| * String representation of the filter |
| * @type {string} |
| */ |
| text: null, |
| /** |
| - * Filter subscriptions the filter belongs to |
| - * @type {Set.<Subscription>} |
| - */ |
| - subscriptions: null, |
| - |
| - /** |
| * Filter type as a string, e.g. "blocking". |
| * @type {string} |
| */ |
| get type() |
| { |
| throw new Error("Please define filter type in the subclass"); |
| }, |
| /** |
| + * Yields subscriptions to which the filter belongs. |
| + * @yields {Subscription} |
| + */ |
| + *subscriptions() |
| + { |
| + yield* this._subscriptions; |
| + }, |
| + |
| + /** |
| + * The number of subscriptions to which the filter belongs. |
| + * @type {number} |
| + */ |
| + get subscriptionCount() |
| + { |
| + return this._subscriptions.size; |
| + }, |
| + |
| + /** |
| + * Adds a subscription to the set of subscriptions to which the filter |
| + * belongs. |
| + * @param {Subscription} subscription |
| + */ |
| + addSubscription(subscription) |
| + { |
| + this._subscriptions.add(subscription); |
| + }, |
| + |
| + /** |
| + * Removes a subscription from the set of subscriptions to which the filter |
| + * belongs. |
| + * @param {Subscription} subscription |
| + */ |
| + removeSubscription(subscription) |
| + { |
| + this._subscriptions.delete(subscription); |
| + }, |
| + |
| + /** |
| * Serializes the filter to an array of strings for writing out on the disk. |
| * @param {string[]} buffer buffer to push the serialization results into |
| */ |
| serialize(buffer) |
| { |
| buffer.push("[Filter]"); |
| buffer.push("text=" + this.text); |
| }, |