Skip to content

2.0.0

Compare
Choose a tag to compare
@tsolomko tsolomko released this 03 Aug 13:39
· 67 commits to develop since this release
2.0.0
c29fc3b

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

  • ByteReader class has been renamed to LittleEndianByteReader.
  • LittleEndianByteReader (ex-ByteReader) is now a final class.
    • LsbBitReader and MsbBitReader are no longer its subclasses.
  • Added a new BigEndianByteReader class with the same set of APIs as LittleEndianByteReader.
  • Added a ByteReader protocol which inherits AnyObject.
    • Most of the methods and properties of the previously existing ByteReader class are now requirements of the new protocol.
    • ByteReader provides default implementations for the initializer, which performs conversion from a BitReader, and for the bytesLeft, bytesRead, and isFinished properties (all of these are not protocol requirements).
    • In addition, ByteReader provides a default implementation for the int(fromBytes:) method.
    • Both LittleEndianByteReader and BigEndianByteReader now conform to the ByteReader protocol.

Bit Reading

  • Added a SignedNumberRepresentation enum with five cases and two instance methods.
  • The BitReader protocol now inherits the ByteReader protocol.
    • Two new method requirements have been added to the BitReader protocol: signedInt(fromBits:representation:) and advance(by:).
    • BitReader now provides a default implementation for int(fromBits:).
  • It is no longer possible to set the offset property of the LsbBitReader and MsbBitReader classes if they are not aligned (a precondition crash occurs instead).
  • The signedInt(fromBits:representation:) function has been added to the LsbBitReader and MsbBitReader classes with the default value of SignedNumberRepresentation.twoComplementNegatives for the representation argument.

Bit Writing

  • Two new method requirements have been added to the BitWriter protocol: write(unsignedNumber:bitsCount:) and write(signedNumber:bitsCount:representation:).
  • BitWriter now provides default implementations for write(signedNumber:bitsCount:representation:) and write(number:bitsCount:).
    • The default implementation of the write(number:bitsCount:) function now has a precondition crash if the bitsCount argument exceeds the bit width of the integer type on the current platform.
  • The write(unsignedNumber:bitsCount:) function of the LsbBitWriter and MsbBitWriter classes now has a precondition crash if the bitsCount argument 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.