summaryrefslogtreecommitdiff
path: root/vendor/doctrine/event-manager/lib
diff options
context:
space:
mode:
authorDevian <devianleong@gmail.com>2021-04-22 17:03:46 +0800
committerDevian <devianleong@gmail.com>2021-04-22 17:03:46 +0800
commit745cf2431a71d0e6c5f08f8605839279b2f7496e (patch)
tree11e4c7a19ac9f9efc1bb253b29b1fa488c34238e /vendor/doctrine/event-manager/lib
Initiate commit
Diffstat (limited to 'vendor/doctrine/event-manager/lib')
-rw-r--r--vendor/doctrine/event-manager/lib/Doctrine/Common/EventArgs.php45
-rw-r--r--vendor/doctrine/event-manager/lib/Doctrine/Common/EventManager.php132
-rw-r--r--vendor/doctrine/event-manager/lib/Doctrine/Common/EventSubscriber.php21
3 files changed, 198 insertions, 0 deletions
diff --git a/vendor/doctrine/event-manager/lib/Doctrine/Common/EventArgs.php b/vendor/doctrine/event-manager/lib/Doctrine/Common/EventArgs.php
new file mode 100644
index 0000000..9b9cc05
--- /dev/null
+++ b/vendor/doctrine/event-manager/lib/Doctrine/Common/EventArgs.php
@@ -0,0 +1,45 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Doctrine\Common;
+
+/**
+ * EventArgs is the base class for classes containing event data.
+ *
+ * This class contains no event data. It is used by events that do not pass state
+ * information to an event handler when an event is raised. The single empty EventArgs
+ * instance can be obtained through {@link getEmptyInstance}.
+ */
+class EventArgs
+{
+ /**
+ * Single instance of EventArgs.
+ *
+ * @var EventArgs
+ */
+ private static $_emptyEventArgsInstance;
+
+ /**
+ * Gets the single, empty and immutable EventArgs instance.
+ *
+ * This instance will be used when events are dispatched without any parameter,
+ * like this: EventManager::dispatchEvent('eventname');
+ *
+ * The benefit from this is that only one empty instance is instantiated and shared
+ * (otherwise there would be instances for every dispatched in the abovementioned form).
+ *
+ * @link https://msdn.microsoft.com/en-us/library/system.eventargs.aspx
+ * @see EventManager::dispatchEvent
+ *
+ * @return EventArgs
+ */
+ public static function getEmptyInstance()
+ {
+ if (! self::$_emptyEventArgsInstance) {
+ self::$_emptyEventArgsInstance = new EventArgs();
+ }
+
+ return self::$_emptyEventArgsInstance;
+ }
+}
diff --git a/vendor/doctrine/event-manager/lib/Doctrine/Common/EventManager.php b/vendor/doctrine/event-manager/lib/Doctrine/Common/EventManager.php
new file mode 100644
index 0000000..a0860e3
--- /dev/null
+++ b/vendor/doctrine/event-manager/lib/Doctrine/Common/EventManager.php
@@ -0,0 +1,132 @@
+<?php
+
+namespace Doctrine\Common;
+
+use function spl_object_hash;
+
+/**
+ * The EventManager is the central point of Doctrine's event listener system.
+ * Listeners are registered on the manager and events are dispatched through the
+ * manager.
+ */
+class EventManager
+{
+ /**
+ * Map of registered listeners.
+ * <event> => <listeners>
+ *
+ * @var object[][]
+ */
+ private $_listeners = [];
+
+ /**
+ * Dispatches an event to all registered listeners.
+ *
+ * @param string $eventName The name of the event to dispatch. The name of the event is
+ * the name of the method that is invoked on listeners.
+ * @param EventArgs|null $eventArgs The event arguments to pass to the event handlers/listeners.
+ * If not supplied, the single empty EventArgs instance is used.
+ *
+ * @return void
+ */
+ public function dispatchEvent($eventName, ?EventArgs $eventArgs = null)
+ {
+ if (! isset($this->_listeners[$eventName])) {
+ return;
+ }
+
+ $eventArgs = $eventArgs ?? EventArgs::getEmptyInstance();
+
+ foreach ($this->_listeners[$eventName] as $listener) {
+ $listener->$eventName($eventArgs);
+ }
+ }
+
+ /**
+ * Gets the listeners of a specific event or all listeners.
+ *
+ * @param string|null $event The name of the event.
+ *
+ * @return object[]|object[][] The event listeners for the specified event, or all event listeners.
+ */
+ public function getListeners($event = null)
+ {
+ return $event ? $this->_listeners[$event] : $this->_listeners;
+ }
+
+ /**
+ * Checks whether an event has any registered listeners.
+ *
+ * @param string $event
+ *
+ * @return bool TRUE if the specified event has any listeners, FALSE otherwise.
+ */
+ public function hasListeners($event)
+ {
+ return ! empty($this->_listeners[$event]);
+ }
+
+ /**
+ * Adds an event listener that listens on the specified events.
+ *
+ * @param string|string[] $events The event(s) to listen on.
+ * @param object $listener The listener object.
+ *
+ * @return void
+ */
+ public function addEventListener($events, $listener)
+ {
+ // Picks the hash code related to that listener
+ $hash = spl_object_hash($listener);
+
+ foreach ((array) $events as $event) {
+ // Overrides listener if a previous one was associated already
+ // Prevents duplicate listeners on same event (same instance only)
+ $this->_listeners[$event][$hash] = $listener;
+ }
+ }
+
+ /**
+ * Removes an event listener from the specified events.
+ *
+ * @param string|string[] $events
+ * @param object $listener
+ *
+ * @return void
+ */
+ public function removeEventListener($events, $listener)
+ {
+ // Picks the hash code related to that listener
+ $hash = spl_object_hash($listener);
+
+ foreach ((array) $events as $event) {
+ unset($this->_listeners[$event][$hash]);
+ }
+ }
+
+ /**
+ * Adds an EventSubscriber. The subscriber is asked for all the events it is
+ * interested in and added as a listener for these events.
+ *
+ * @param EventSubscriber $subscriber The subscriber.
+ *
+ * @return void
+ */
+ public function addEventSubscriber(EventSubscriber $subscriber)
+ {
+ $this->addEventListener($subscriber->getSubscribedEvents(), $subscriber);
+ }
+
+ /**
+ * Removes an EventSubscriber. The subscriber is asked for all the events it is
+ * interested in and removed as a listener for these events.
+ *
+ * @param EventSubscriber $subscriber The subscriber.
+ *
+ * @return void
+ */
+ public function removeEventSubscriber(EventSubscriber $subscriber)
+ {
+ $this->removeEventListener($subscriber->getSubscribedEvents(), $subscriber);
+ }
+}
diff --git a/vendor/doctrine/event-manager/lib/Doctrine/Common/EventSubscriber.php b/vendor/doctrine/event-manager/lib/Doctrine/Common/EventSubscriber.php
new file mode 100644
index 0000000..7d5e2ea
--- /dev/null
+++ b/vendor/doctrine/event-manager/lib/Doctrine/Common/EventSubscriber.php
@@ -0,0 +1,21 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Doctrine\Common;
+
+/**
+ * An EventSubscriber knows himself what events he is interested in.
+ * If an EventSubscriber is added to an EventManager, the manager invokes
+ * {@link getSubscribedEvents} and registers the subscriber as a listener for all
+ * returned events.
+ */
+interface EventSubscriber
+{
+ /**
+ * Returns an array of events this subscriber wants to listen to.
+ *
+ * @return string[]
+ */
+ public function getSubscribedEvents();
+}