2.0.0
In this release the API design of BitByteData has been reworked. Additionally, new functionality for correctly dealing with signed integers and their bit representations has been added. You may find a new Migration to 2.0 section in the README which should be helpful in adopting the new changes. You may also refer to the API Design document for some additional context and reasoning behind the changes.
Byte Reading
ByteReaderclass has been renamed toLittleEndianByteReader.LittleEndianByteReader(ex-ByteReader) is now a final class.LsbBitReaderandMsbBitReaderare no longer its subclasses.
- Added a new
BigEndianByteReaderclass with the same set of APIs asLittleEndianByteReader. - Added a
ByteReaderprotocol which inheritsAnyObject.- Most of the methods and properties of the previously existing
ByteReaderclass are now requirements of the new protocol. ByteReaderprovides default implementations for the initializer, which performs conversion from aBitReader, and for thebytesLeft,bytesRead, andisFinishedproperties (all of these are not protocol requirements).- In addition,
ByteReaderprovides a default implementation for theint(fromBytes:)method. - Both
LittleEndianByteReaderandBigEndianByteReadernow conform to theByteReaderprotocol.
- Most of the methods and properties of the previously existing
Bit Reading
- Added a
SignedNumberRepresentationenum with five cases and two instance methods. - The
BitReaderprotocol now inherits theByteReaderprotocol.- Two new method requirements have been added to the
BitReaderprotocol:signedInt(fromBits:representation:)andadvance(by:). BitReadernow provides a default implementation forint(fromBits:).
- Two new method requirements have been added to the
- It is no longer possible to set the
offsetproperty of theLsbBitReaderandMsbBitReaderclasses if they are not aligned (a precondition crash occurs instead). - The
signedInt(fromBits:representation:)function has been added to theLsbBitReaderandMsbBitReaderclasses with the default value ofSignedNumberRepresentation.twoComplementNegativesfor therepresentationargument.
Bit Writing
- Two new method requirements have been added to the
BitWriterprotocol:write(unsignedNumber:bitsCount:)andwrite(signedNumber:bitsCount:representation:). BitWriternow provides default implementations forwrite(signedNumber:bitsCount:representation:)andwrite(number:bitsCount:).- The default implementation of the
write(number:bitsCount:)function now has a precondition crash if thebitsCountargument exceeds the bit width of the integer type on the current platform.
- The default implementation of the
- The
write(unsignedNumber:bitsCount:)function of theLsbBitWriterandMsbBitWriterclasses now has a precondition crash if thebitsCountargument exceeds the bit width of the integer type on the current platform.
General
- Swift 4.2 is no longer supported. For reference, the following platforms and Swift versions are supported at the time of this release:
- Apple platforms: Swift 5.0+
- Linux: Swift 5.0+
- Windows: Swift 5.4+
- Minimum iOS deployment version (when installed via CocoaPods or Carthage) is now 9.0.
- Documentation has been updated.
- Added documentation for new APIs.
- A couple of missing precondition checks are now properly documented.
- Existing documentation has been made more concise and slightly more grammatically correct.