v3.0.1 - 22 May 2018

Patch release of 3.0.x

Changes

    #95 : Add description to assert()
    #98 : HHVM >3.18.4 & >3.20.2 reports as PHP-7.1 but does not support constant visibility
    Micro-Optimized Enum::by*methods

BC-breaks

none

v3.0.0 - 5 Nov 2017

New Major Version

We have worked a lot to make this library even more useful and also optimized the performance a lot!
To be able to do so we introduced a couple of BC breaks (please read the changes carefully) but we tried to keep them as small as possible.

Changes

    #94 optimized Enum::detectConstants() using assertion to check for ambiguous enumerator values
        this method is called once on initialize an enumeration
    #68 removed deprecated methods
    #69 bumped up PHP version to >=5.6
        new language features helps us to better maintain this library and provides better optimized code
        we decided to bump up the supported PHP version as PHP-5.3 is outdated for a long time now
        we decided to still keep PHP-5.6 (even if outdated as well) as this library is still compatible with HHVM. This way HHVM users can use this new version and have more time to migrate
    #87 added phpbench suite
    #73 EnumSet::setBinaryBitset*(): now throws an exception on out-of-range bits set
    #86 refactored EnumSet to be auto based on integer or binary bitset dependent on enumeration size
        Methods changed:
            union(), intersect(), diff() and symDiff() support one argument of $others only
        Methods added:
            public function getBit(int $ordinal) : bool
            public function setBit(int $ordinal, bool $bit) : void
    #70 removed iterator flags for EnumMap
        the key will be the enumerator object and the value the assigned data
    #90 #91 #92 Refactor EnumMap
        if data are serializable the EnumMap is serializable, too
        no longer based on SplObjectStorage
        no longer implement Serializable
        still implements ArrayAccess, Countable and Iterator
        new implements SeekableIterator
        Methods removed:
            public function attach($enumerator) : void
                please use public function offsetSet($enumerator) : void
                or direct array access $map[$enum] = $value
            public function detach($enumerator): void
                please use public function offsetUnset($enumerator) : void
                or direct array access unset($map[$enum])
            public addAll(SplObjectStorage $storage) : void
            public getHash(object $object) : string
            public removeAll(SplObjectStorage $storage) : void
            public removeAllExcept(SplObjectStorage $storage) : void
            public serialize(void) : string
            public setInfo(mixed $data) : void
            public unserialize(string $serialized) : void
        Methods changed:
            public contains($enumerator) : bool
                same as public offsetExists($enumerator) : bool but returns true on NULL values
        Methods added:
            public function seek(int $pos) : void
            public function getKeys() : Enum[]
            public function getValues() : mixed[]
            public function search($enumerator, bool $strict) : Enum|null


v3.0.0-rc3 - 28 Oct 2017

Third Release Candidate of new major version

Changes

    #94 optimized Enum::detectConstants() using assertion to check for ambiguous enumerator values
        this method is called once on initialize an enumeration

BC-breaks:

    #94 Now on initialize an enumeration with ambiguous enumerator values an AssertionError will be thrown (PHP>=7) or a warning will be triggered (PHP<=5.6) only in case assertions are enabled (development mode) else no error will be thrown. Please read here how assertions work.


v3.0.0-rc2 - 25 Oct 2017

Second Release Candidate of new major version

Changes

    optimized EnumSet::count() up to 40%

BC-breaks:

    none


v3.0.0-rc1 - 19 Oct 2017

First Release Candidate of new major version

We have worked a lot to make this library even more useful and also optimized the performance a lot!
To be able to do so we introduced a couple of BC breaks (please read the changes carefully) but we tried to keep them as small as possible.

Changes

    #68 remove deprecated methods
    #69 bumped up PHP version to >=5.6
        new language features helps us to better maintain this library and provides better optimized code
        we decided to bump up the supported PHP version as PHP-5.3 is outdated for a long time now
        we decided to still keep PHP-5.6 (even if outdated as well) as this library is still compatible with HHVM. This way HHVM users can use this new version and have more time to migrate
    #87 added phpbench suite
    #73 EnumSet::setBinaryBitset*(): now throws an exception on out-of-range bits set
    #86 refactored EnumSet to be auto based on integer or binary bitset dependent on enumeration size
        Methods changed:
            union(), intersect(), diff() and symDiff() support one argument of $others only
        Methods added:
            public function getBit(int $ordinal) : bool
            public function setBit(int $ordinal, bool $bit) : void
    #70 removed iterator flags for EnumMap
        the key will be the enumerator object and the value the assigned data
    #90 #91 #92 Refactor EnumMap
        if data are serializable the EnumMap is serializable, too
        no longer based on SplObjectStorage
        no longer implement Serializable
        still implements ArrayAccess, Countable and Iterator
        new implements SeekableIterator
        Methods removed:
            public function attach($enumerator) : void
                please use public function offsetSet($enumerator) : void
                or direct array access $map[$enum] = $value
            public function detach($enumerator): void
                please use public function offsetUnset($enumerator) : void
                or direct array access unset($map[$enum])
            public addAll(SplObjectStorage $storage) : void
            public getHash(object $object) : string
            public removeAll(SplObjectStorage $storage) : void
            public removeAllExcept(SplObjectStorage $storage) : void
            public serialize(void) : string
            public setInfo(mixed $data) : void
            public unserialize(string $serialized) : void
        Methods changed:
            public contains($enumerator) : bool
                same as public offsetExists($enumerator) : bool but returns true on NULL values
        Methods added:
            public function seek(int $pos) : void
            public function getKeys() : Enum[]
            public function getValues() : mixed[]
            public function search($enumerator, bool $strict) : Enum|null


v2.3.1 - 21 Dec 2016

Bugfix release

Changes:

#82 EnumSet::setBinaryBitset*(): fixed logic of 'truncate out-of-range bits of last byte'


v2.3.0 - 19 Dec 2016
Feature release of the 2.x branch.

(No changes since 2.3.0-rc1)

New:

    #63: EnumSet: support for Little- and Big-Endian binary bitsets
        Added EnumSet::getBinaryBitsetLe() : string
        Added EnumSet::setBinaryBitsetLe(string $bitset)
        Added EnumSet::getBinaryBitsetBe() : string
        Added EnumSet::setBinaryBitsetBe(string $bitset)
    #64: EnumSet: added isEqual(), isSubset() and isSuperset()
        Added EnumSet::isEqual(EnumSet $other) : bool
        Added EnumSet::isSubset(EnumSet $other) : bool
        Added EnumSet::isSuperset(EnumSet $other) : bool
    #66: EnumSet: added methods union(), intersect(), diff() and symDiff()
        Added EnumSet::union(EnumSet ...$others) : EnumSet
        Added EnumSet::intersect(EnumSet ...$others) : EnumSet
        Added EnumSet::diff(EnumSet ...$others) : EnumSet
        Added EnumSet::symDiff(EnumSet ...$others) : EnumSet
    #65: EnumSet: added getEnumerators(), getNames() and getValues()
        Added EnumSet::getEnumerators() : Enum[]
        Added EnumSet::getValues() : mixed[]
        Added EnumSet::getNames() : string[]
    #78: Added static Enum::getValues(), Enum::getNames() and Enum::getOrdinals()
        Added Enum::getValues() : mixed[]
        Added Enum::getNames() : string[]
        Added Enum::getOrdinals() : int[]
    #80: refactored Enum::getBy* to Enum::by*
        Renamed Enum::getByName() -> Enum::byName()
        Renamed Enum::getByOrdinal() -> Enum::byName()
        Added Enum::byValue()
    #59: handle class constant visibility added in PHP-7.1
    #67: optimized EnumSet::count() by 30% to 240%
    #75: optimized EnumSet by using EnumSet properties directly instead of getter methods

##Fixed:

    #71: EnumSet::setBinaryBitset*(): out-of-range bits of last byte not truncated
    #77: Missing additional check on Enum::is() to return TRUE in some circumstances

Deprecations:

    #63 :EnumSet::getBitset() : string
    #63: EnumSet::setBitset(string $bitset)
    #79: Enum::clear()
    #80: Enum::getByName()
    #80: Enum::getByOrdinal()


v2.3.0-rc1 - 7 Dec 2016

New:

    #63: EnumSet: support for Little- and Big-Endian binary bitsets
        Added EnumSet::getBinaryBitsetLe() : string
        Added EnumSet::setBinaryBitsetLe(string $bitset)
        Added EnumSet::getBinaryBitsetBe() : string
        Added EnumSet::setBinaryBitsetBe(string $bitset)
    #64: EnumSet: added isEqual(), isSubset() and isSuperset()
        Added EnumSet::isEqual(EnumSet $other) : bool
        Added EnumSet::isSubset(EnumSet $other) : bool
        Added EnumSet::isSuperset(EnumSet $other) : bool
    #66: EnumSet: added methods union(), intersect(), diff() and symDiff()
        Added EnumSet::union(EnumSet ...$others) : EnumSet
        Added EnumSet::intersect(EnumSet ...$others) : EnumSet
        Added EnumSet::diff(EnumSet ...$others) : EnumSet
        Added EnumSet::symDiff(EnumSet ...$others) : EnumSet
    #65: EnumSet: added getEnumerators(), getNames() and getValues()
        Added EnumSet::getEnumerators() : Enum[]
        Added EnumSet::getValues() : mixed[]
        Added EnumSet::getNames() : string[]
    #78: Added static Enum::getValues(), Enum::getNames() and Enum::getOrdinals()
        Added Enum::getValues() : mixed[]
        Added Enum::getNames() : string[]
        Added Enum::getOrdinals() : int[]
    #80: refactored Enum::getBy* to Enum::by*
        Renamed Enum::getByName() -> Enum::byName()
        Renamed Enum::getByOrdinal() -> Enum::byName()
        Added Enum::byValue()
    #59: handle class constant visibility added in PHP-7.1
    #67: optimized EnumSet::count() by 30% to 240%
    #75: optimized EnumSet by using EnumSet properties directly instead of getter methods

##Fixed:

    #71: EnumSet::setBinaryBitset*(): out-of-range bits of last byte not truncated
    #77: Missing additional check on Enum::is() to return TRUE in some circumstances

Deprecations:

    #63 :EnumSet::getBitset() : string
    #63: EnumSet::setBitset(string $bitset)
    #79: Enum::clear()
    #80: Enum::getByName()
    #80: Enum::getByOrdinal()


v2.2.1 - 6 Sep 2016

Bugfix release

Changes:

#60 Infinitive loop on counting an empty set based on an empty enumeration


v2.2.0 - 4 Oct 2015

Feature release of the 2.x branch.

Changes:

    #53 Added new method Enum::has()


v1.3.0 - 4 Oct 2015

Feature release of the 1.x branch.

Changes:

    #54 Added new method Enum::has()


v2.1.0 - 22 Jun 2015

Feature release of the 2.x branch.

Changes:

    #52 added EnumSerializableTrait for making enumerations serializable
    #51 EnumSet: dynamic bitset size - no longer limited to 32/64 enumerators
    #51 EnumSet: added methods [get|set]Bitset


v2.0.0 - 24 Feb 2015

Changes:

    Inherited enumerations will be handled as own enumeration types
    EnumSet is based on a real bitset now
    Removed unnecessary source folder for PSR-4 autloading
    Added Enum::getEnumerators()

BC-breaks:

    EnumSet: Max. possible enumerators are limited by the size of an integer (32 or 64)
    Enum::is() no longer returns TRUE on inherited enumerations


v2.0.0-beta1 - 9 Feb 2015

Changes:

* Inherited enumerations will be handled as own enumeration types
* EnumSet is based on a real bitset now
* Removed unnecessary source folder for PSR-4 autloading
* Added Enum::getEnumerators() 

BC-breaks:

* EnumSet: Max. possible enumerators are limited by the size of an integer (32 or 64)
* Enum::is() no longer returns TRUE on inherited enumerations


v1.2.0 - 22 May 2014


v1.1.0 - 3 Apr 2014

This is a feature and bugfix release


v1.0.0 - 15 Oct 2013

Changes since 1.0.0-beta2:

    Enumeration values will be compared using strict comparison
    __toString() returns the name by default and is no longer final


v1.0.0-beta2 - 23 Sep 2013

Changes:

    PHP 5.3 will be required
    Moved to namespaces
    BC break how to instantiate a new enumeration (please read usage information)
    It's no longer possible to define a default value
        You can define a method to instantiate it like UserStatus::getDefault()
    Now instances of the same enumeration holds the same instance (singleton)
    Now getConstants() is static

New Features:

    Implemented EnumMap
    Implemented EnumSet
    Added ordinal information and make it possible to instantiate it from


v1.0.0-beta1 - 14 Oct 2013

First beta
