From cebf0555e56b2d7e40611bcbd3b95eaa89da5653 Mon Sep 17 00:00:00 2001 From: Timofey Solomko Date: Sun, 3 Sep 2017 20:04:44 +0300 Subject: [PATCH] Make HuffmanLength Comparable and use this in their sorting in HuffmanTree --- Sources/DecodingHuffmanTree.swift | 8 +------- Sources/EncodingHuffmanTree.swift | 8 +------- Sources/HuffmanLength.swift | 16 ++++++++++++++++ 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/Sources/DecodingHuffmanTree.swift b/Sources/DecodingHuffmanTree.swift index 7d569d39..2f4ed8d1 100644 --- a/Sources/DecodingHuffmanTree.swift +++ b/Sources/DecodingHuffmanTree.swift @@ -17,13 +17,7 @@ class DecodingHuffmanTree { self.bitReader = bitReader // Sort `lengths` array to calculate canonical Huffman code. - let sortedLengths = lengths.sorted { (left: HuffmanLength, right: HuffmanLength) -> Bool in - if left.codeLength == right.codeLength { - return left.symbol < right.symbol - } else { - return left.codeLength < right.codeLength - } - } + let sortedLengths = lengths.sorted() func reverse(bits: Int, in symbol: Int) -> Int { // Auxiliarly function, which generates reversed order of bits in a number. diff --git a/Sources/EncodingHuffmanTree.swift b/Sources/EncodingHuffmanTree.swift index 4774369a..e2542525 100644 --- a/Sources/EncodingHuffmanTree.swift +++ b/Sources/EncodingHuffmanTree.swift @@ -16,13 +16,7 @@ class EncodingHuffmanTree { self.bitWriter = bitWriter // Sort `lengths` array to calculate canonical Huffman code. - let sortedLengths = lengths.sorted { (left: HuffmanLength, right: HuffmanLength) -> Bool in - if left.codeLength == right.codeLength { - return left.symbol < right.symbol - } else { - return left.codeLength < right.codeLength - } - } + let sortedLengths = lengths.sorted() func reverse(bits: Int, in symbol: Int) -> Int { // Auxiliarly function, which generates reversed order of bits in a number. diff --git a/Sources/HuffmanLength.swift b/Sources/HuffmanLength.swift index 516d3fb6..5e4738eb 100644 --- a/Sources/HuffmanLength.swift +++ b/Sources/HuffmanLength.swift @@ -39,3 +39,19 @@ struct HuffmanLength { } } + +extension HuffmanLength: Comparable { + + static func <(left: HuffmanLength, right: HuffmanLength) -> Bool { + if left.codeLength == right.codeLength { + return left.symbol < right.symbol + } else { + return left.codeLength < right.codeLength + } + } + + static func ==(left: HuffmanLength, right: HuffmanLength) -> Bool { + return left.codeLength == right.codeLength && left.symbol == right.symbol + } + +}