| Index: src/Event.h |
| =================================================================== |
| new file mode 100644 |
| --- /dev/null |
| +++ b/src/Event.h |
| @@ -0,0 +1,80 @@ |
| +/* |
|
sergei
2017/03/15 12:17:20
I think the file should be called EventManager.
|
| + * This file is part of Adblock Plus <https://adblockplus.org/>, |
| + * Copyright (C) 2006-2016 Eyeo GmbH |
|
sergei
2017/03/15 12:17:20
It's already 2017.
|
| + * |
| + * Adblock Plus is free software: you can redistribute it and/or modify |
| + * it under the terms of the GNU General Public License version 3 as |
| + * published by the Free Software Foundation. |
| + * |
| + * Adblock Plus 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 Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
| + */ |
| + |
| +#if !defined(EVENT_H) |
| +#define EVENT_H |
| + |
| +#include <map> |
| +#include <mutex> |
| +#include <v8.h> |
| +#include <AdblockPlus/JsEngine.h> |
| + |
| +/** |
| + * Event manager class encapsulates an atomic map from names to event functions. |
| + * |
| + * The present version of this class has a simple event registry. |
| + * Only one callback function may be registered per event. |
| + * |
| + * Event methods are synchronized on the event registry, not event execution. |
| + * Once the callback function of an event executes it will continue to run |
| + * even if the event is deleted before the callback finishes. |
| + */ |
| +class EventManager |
| +{ |
| + /** |
| + * Map from event names to callback functions. |
| + * |
| + */ |
| + std::map<std::string, AdblockPlus::JsEngine::EventCallback> eventMap; |
| + |
| + std::mutex m; |
|
sergei
2017/03/15 12:17:20
Don't mind to call it mutex instead of m?
|
| + |
| + typedef std::unique_lock<std::mutex> UniqueLockType; |
|
sergei
2017/03/15 12:17:20
Why not to use std::lock_guard?
|
| + |
| +public: |
| + EventManager() {}; // = default; |
|
sergei
2017/03/15 12:17:20
I still don't see any reason to have such code and
|
| + |
| + /** |
| + * Set the callback function for an event. |
| + * Create event if not present; ovewrite callback if it is. |
| + * @param eventName |
| + * Event name. Any string is permitted here. |
| + * It's not limited to valid JavaScript identifiers. |
| + * @param callback |
| + * Function called when event triggers |
| + */ |
| + void Set(const std::string& eventName, AdblockPlus::JsEngine::EventCallback callback); |
|
sergei
2017/03/15 12:17:20
It's better to use const reference for callback ar
|
| + |
| + /** |
| + * Remove an event and its callback function. |
| + * The event need not be present. |
|
sergei
2017/03/15 12:17:20
Actually it won't trigger any error if there is no
|
| + * @param eventName |
| + * Event name |
| + */ |
| + void Remove(const std::string& eventName); |
| + |
| + /** |
| + * Trigger an event and execute its callback synchronously. |
|
sergei
2017/03/15 12:17:20
What does "execute its callback synchronously" mea
|
| + * @param eventName |
| + * Event name |
| + * @param args |
| + * The callback function runs with these arguments passed. |
| + */ |
| + void Trigger(const std::string& eventName, AdblockPlus::JsValueList& args); |
|
sergei
2017/03/15 12:17:20
What about adding const to args? It's clear that u
sergei
2017/03/15 12:17:20
What about adding const modifier to this method?
|
| +}; |
| + |
| +#endif |