\Phabstractic\EventHandlerPriorityQueue

The Handler Priority Queue Class

This class lines up Handlers in a line of priority. It then is able to propagate an event down the handlers 'chain'.

CHANGELOG

1.0: Created Handler Priority Queue - August 16th, 2013 1.1: Eliminated __destruct as obselete - October 7th, 2013 2.0: Integrated with Primus 2 in mind - October 14th, 2015 3.0: reformatted for inclusion in phabstractic - July 30th, 2016

Summary

Methods
Properties
Constants
detachPublisher()
attachPublisher()
unlinkFromPublishers()
getPublishers()
notifyObserver()
__debugInfo()
__construct()
top()
topReference()
peek()
peekReference()
bottom()
bottomReference()
index()
indexRange()
indexReference()
indexRangeReference()
delete()
deletePriority()
pop()
popReference()
pull()
pullReference()
roll()
push()
pushReference()
exchange()
duplicate()
retrievePriority()
configure()
saveSettings()
getSettings()
processSettings()
getList()
propagate()
No public properties found
EQUAL
HIGHER
LOWER
constructObservedSubjects()
cmp()
$observedSubjects
$conf
N/A
No private methods found
No private properties found
N/A

Constants

EQUAL

EQUAL

Return Data Equal To Given Urgency Index?

HIGHER

HIGHER

Return Data Equal or Higher To Given Urgency Index?

LOWER

LOWER

Return Data Equal or Lower to Given Urgency Index?

Properties

$observedSubjects

$observedSubjects : \Phabstractic\Patterns\Phabstractic\Patterns\Resource\PublisherInterface

The subjects that this observer is listening to

For an observer that listens to multiple publishers with some added functionality see Phabstractic\Event\Aggregator

Type

\Phabstractic\Patterns\Phabstractic\Patterns\Resource\PublisherInterface

$conf

$conf : \Phabstractic\Features\Zend\Config\Config

The objects configuration object

Should be an instance of Zend/Config

Type

\Phabstractic\Features\Zend\Config\Config — The object configuration info

Methods

detachPublisher()

detachPublisher(\Phabstractic\Patterns\Resource\PublisherInterface  $publisher) 

This detaches the observer from its subject

Reciprocal methods exist in the publisher

Parameters

\Phabstractic\Patterns\Resource\PublisherInterface $publisher

attachPublisher()

attachPublisher(\Phabstractic\Patterns\Resource\PublisherInterface  $publisher) 

Attach this observer to a new publisher

This also acts like a 'set' function, and null is an acceptable value to be passed

Parameters

\Phabstractic\Patterns\Resource\PublisherInterface $publisher

unlinkFromPublishers()

unlinkFromPublishers() 

Remove this observer from all publishers

getPublishers()

getPublishers() : array

Return array of publishers

Returns

array

notifyObserver()

notifyObserver(\Phabstractic\Patterns\Resource\PublisherInterface  $target, \Phabstractic\Patterns\Resource\StateInterface  $state) : boolean

Notify the object of an event

This causes the object to 'fire' on any event passed to it.

Don't subclass this class to build a filter in this area, use a filter object instead. See handler class description

Parameters

\Phabstractic\Patterns\Resource\PublisherInterface $target
\Phabstractic\Patterns\Resource\StateInterface $state

Returns

boolean —

Return true if propagated (state is AbstractEvent)

__debugInfo()

__debugInfo() 

Debug Info (var_dump)

Display debug info

Requires PHP 5.6+

__construct()

__construct(mixed  $data = null, \Phabstractic\Data\Types\Resource\FilterInterface  $restrictions = null, array  $options = array()) 

The Sorted List constructor

Accepts data, and the obligatory options parameter

Passes the required restrictions onto the parent class along with the options

NOTE: In order to sort a list it MUST all be the same type, so restrictions are set up.

This instantiates the class and sets the index

Parameters

mixed $data

The data to initialize the queue

\Phabstractic\Data\Types\Resource\FilterInterface $restrictions
array $options

The options to pass into the object

top()

top() : string|\Phabstractic\Data\Types\Resource\Phabstractic\Data\Types\None

Returns the top value

This abstract class only sorts

Throws

\Phabstractic\Data\Types\Resource\Phabstractic\Data\Types\Exception\RangeException

if no top exists

Returns

string|\Phabstractic\Data\Types\Resource\Phabstractic\Data\Types\None —

'Top' value of list otherwise

topReference()

topReference() : string|\Phabstractic\Data\Types\Resource\Phabstractic\Data\Types\None

Returns the top value as a reference

This abstract class only sorts

Throws

\Phabstractic\Data\Types\Resource\Phabstractic\Data\Types\Exception\RangeException

if top is empty

Returns

string|\Phabstractic\Data\Types\Resource\Phabstractic\Data\Types\None

peek()

peek() : mixed|\Phabstractic\Data\Types\Phabstractic\Data\Types\None

Wrapper function for top()

Returns

mixed|\Phabstractic\Data\Types\Phabstractic\Data\Types\None —

Data from priority object, null if otherwise

peekReference()

peekReference() : mixed|\Phabstractic\Data\Types\Phabstractic\Data\Types\None

Wrapper function for topReference()

Returns

mixed|\Phabstractic\Data\Types\Phabstractic\Data\Types\None —

Data from priority object as a reference, null if otherwise

bottom()

bottom() : mixed|\Phabstractic\Data\Types\Phabstractic\Data\Types\None

Returns the least urgent item from the list

Throws

\Phabstractic\Data\Types\Phabstractic\Data\Types\Exception\RangeException

Returns

mixed|\Phabstractic\Data\Types\Phabstractic\Data\Types\None —

The data from the priority object, null if otherwise

bottomReference()

bottomReference() : mixed|\Phabstractic\Data\Types\Phabstractic\Data\Types\None

Returns the least urgent item from the list as a reference

Throws

\Phabstractic\Data\Types\Phabstractic\Data\Types\Exception\RangeException

Returns

mixed|\Phabstractic\Data\Types\Phabstractic\Data\Types\None —

The data from the priority object as a reference, null if otherwise

index()

index(integer  $i) : string|\Phabstractic\Data\Types\Resource\Phabstractic\Data\Types\None

Returns the data objects specified by the index request

This abstract class only sorts

Parameters

integer $i

the given index

Throws

\Phabstractic\Data\Types\Resource\Phabstractic\Data\Types\Exception\RangException

if index is out of range

Returns

string|\Phabstractic\Data\Types\Resource\Phabstractic\Data\Types\None

indexRange()

indexRange(\Phabstractic\Data\Types\Phabstractic\Data\Types\Range  $r) : array

Get A Range Of Indexes

This gets an array of objects that have priorities between ranges

NOTE: The utility function must be used because of incompatibility of array_unique algorithm

Parameters

\Phabstractic\Data\Types\Phabstractic\Data\Types\Range $r

The range to include

Returns

array —

The appropriate array

indexReference()

indexReference(integer  $i) : string|\Phabstractic\Data\Types\Resource\Phabstractic\Data\Types\None

Returns the data objects specified by the index request

This abstract class only sorts

Parameters

integer $i

the given index

Throws

\Phabstractic\Data\Types\Resource\Phabstractic\Data\Types\Exception\RangException

if index is out of range

Returns

string|\Phabstractic\Data\Types\Resource\Phabstractic\Data\Types\None

indexRangeReference()

indexRangeReference(\Phabstractic\Data\Types\Phabstractic\Data\Types\Range  $r) : array

Get A Range Of Index References

This gets an array of objects that have priorities between ranges

NOTE: The utility function must be used because of incompatibility of array_unique algorithm

Parameters

\Phabstractic\Data\Types\Phabstractic\Data\Types\Range $r

The range to include

Returns

array —

The appropriate array

delete()

delete(mixed  $data) : boolean

Deletes an element given by data from the list

This does not need sorting because the list will already be sorted by urgency, eliminating one item does not upset that sort

Parameters

mixed $data

The given data item to remove from the list

Throws

\Phabstractic\Data\Types\Phabstractic\Data\TypesException\RangeException

if set to strict and element doesn't exist

Returns

boolean —

Whether the data item was deleted, returns false if data item not in queue

deletePriority()

deletePriority(integer  $priority) : boolean

Delete all elements meeting a particular priority

Pretty straight forward

Parameters

integer $priority

Priority to delete

Returns

boolean —

Successful?

pop()

pop() : string|\Phabstractic\Data\Types\Resource\Falcraft\Data\Types\Null

Pop the item off the list

This abstract class only sorts

Returns

string|\Phabstractic\Data\Types\Resource\Falcraft\Data\Types\Null

popReference()

popReference() : string|\Phabstractic\Data\Types\Resource\Falcraft\Data\Types\Null

Pop the item off the list

This abstract class only sorts

Returns

string|\Phabstractic\Data\Types\Resource\Falcraft\Data\Types\Null

pull()

pull() : mixed|\Phabstractic\Data\Types\Phabstractic\Data\Types\None

Pull the least urgent item off the list

This truncates the lsit from the bottom, and return it's value

NOTE: This returns the priority's DATA

Returns

mixed|\Phabstractic\Data\Types\Phabstractic\Data\Types\None —

The data associated with the lowest urgency, null otherwise

pullReference()

pullReference() : mixed|\Phabstractic\Data\Types\Phabstractic\Data\Types\None

Pull the least urgent item off the list as a reference

This truncates the lsit from the bottom, and return it's value

NOTE: This returns the priority's DATA

Returns

mixed|\Phabstractic\Data\Types\Phabstractic\Data\Types\None —

The data reference associated with the lowest urgency, null otherwise

roll()

roll(  $i) 

Cannot roll a priority queue

Parameters

$i

Throws

\Phabstractic\Data\Types\Exception\RuntimeException

push()

push() : integer|null

Push a value on to the list

This automatically sorts the list after all other requirements have been met

Remember AbstractSortedList is the parent of this abstract class

Returns

integer|null —

Count of new list, null if restrictions not met

pushReference()

pushReference(  $a) : integer|null

Push a reference on to the list (fifo, lifo, etc)

This automatically sorts the list after all other requiresments have been met

Parameters

$a

Returns

integer|null —

Count of new list, null if restrictions are not met

exchange()

exchange() 

Exchange the two top elements of the list

Throws

\Phabstractic\Data\Types\Phabstractic\Data\Types\Exception\RuntimeException

duplicate()

duplicate() 

Duplicate the value at the top of the list

Throws

\Phabstractic\Data\Types\Phabstractic\Data\Types\Exception\RuntimeException

retrievePriority()

retrievePriority(mixed  $data) 

Retrieve reference to priority associated with data

Parameters

mixed $data

The data to search for

configure()

configure(array|string|\Phabstractic\Features\Zend\Config\Config  $configuration, string  $format = null, mixed  $context = null) : boolean

Configure An Object

Expects an array for configuration however, you can also pass it a filepath where it will read the information from a file automatically detecting the format using the file extension. You can also pass a Zend/Config object already made.

You can also pass a format specifier (forced format) for use in a if $configuration is a string formatted with such information. E.G. to load from a string in the format ini:

$this->configure($configString, 'ini');

The $context argument is used for any additional reader constructor information, such as the constructor for the 'yaml' format.

NOTE: You can override/extend the classes used for reading formats by identifying an additional array in the property $this->configReaders. This will merge with the standard formats array.

Parameters

array|string|\Phabstractic\Features\Zend\Config\Config $configuration

The objects configuration information.

string $format

The forced format, or format for configuration string

mixed $context

Any additional information for a reader constructor, such as needed for the YAML format.

Returns

boolean —

True if instantiated

saveSettings()

saveSettings(string  $file, \Phabstractic\Features\Zend\Config\Writer\WriterInterface  $writer = null, boolean  $exclusive = true, mixed  $context = null) 

Save an Object's Configuration to a File

Takes an objects $conf property and writes the information contained therein to a file with a format automatically specified by the filename.

It is possible to retrieve a string of a particular format from this method by specifying the filename '#string' with an extension indicating the desired format, such as '#string.json'.

The $context argument is used for any additional reader constructor information, such as the constructor for the 'yaml' format.

NOTE: You can override/extend the classes used for writing formats by identifying an additional array in the property $this->configWriters. This will merge with the standard formats array.

Parameters

string $file

The file path to write to, or '#string.ext'

\Phabstractic\Features\Zend\Config\Writer\WriterInterface $writer

The optional writer object supplied to use (such as a MySQL writer)

boolean $exclusive

Argument provided to toFile(), file exclusive lock when writing

mixed $context

Any additionla writer constructor information (YAML)

getSettings()

getSettings(string  $format,   $context = null) : string|boolean

Retrieve an Object's Configuration Information As String

This is a shortcut to ::saveSettings() which specifies a format and forces the return of a string, using the #string.ext filename -see documentation for ::saveSettings()-

Parameters

string $format

The format to return, must be supported by ::saveSettings(), use $this->configWriters to support additional formats.

$context

Returns

string|boolean —

The formatted string, or false otherwise

processSettings()

processSettings(\Phabstractic\Features\Zend\Config\Processor\ProcessorInterface  $processor) 

Process an Object's Configuration

This uses a Zend\Config\Processor implementation to process the configuration information, such as constants. The processor must be supplied and implement ProcessorInterface

NOTE: Edits the $conf object in place.

Parameters

\Phabstractic\Features\Zend\Config\Processor\ProcessorInterface $processor

The given processor object

getList()

getList() : array

Retrieve the list element of the list

Returns

array —

The current internal list member

propagate()

propagate(\Phabstractic\Patterns\Resource\PublisherInterface  $publisher, \Phabstractic\Event\Resource\EventInterface  $event) 

Propagate an event down through the list of handlers

This checks if an event has been stopped or is unstoppable These can be set in the handlers themselves.

NOTE: PriorityQueue inherits from AbsractSortedList getList() will already be sorted with the appropriate queues

It's important that the event passed is a reference, so that it can be potentially stopped.

Parameters

\Phabstractic\Patterns\Resource\PublisherInterface $publisher
\Phabstractic\Event\Resource\EventInterface $event

constructObservedSubjects()

constructObservedSubjects() 

Make sure $this->observedSubjects has been constructed

cmp()

cmp(  $l,   $r) 

The comparison function.

Returns -1 if $l is 'less than'/before $r 0 if $l and $r are equal +1 if $l is 'greater than'/after $r

Parameters

$l
$r