[Swift] Migrate Swift runtime to Swift 5.
This switches from using the deprecated hashValue to hash(into:). It also switches from using index to firstIndex (matching the change in the standard library). In the test template, we switch to using String directly instead of String.characters. This also switches all the Travis macOS tests to use the Xcode 10.2 / Mojave image and changes the Linux Swift tests to download Swift 5.0.1.
This commit is contained in:
parent
54daca92f7
commit
509eeefa4a
18
.travis.yml
18
.travis.yml
|
@ -74,42 +74,42 @@ matrix:
|
|||
- clang-3.7
|
||||
- os: osx
|
||||
compiler: clang
|
||||
osx_image: xcode10.1
|
||||
osx_image: xcode10.2
|
||||
env:
|
||||
- TARGET=cpp
|
||||
- GROUP=LEXER
|
||||
stage: extended-test
|
||||
- os: osx
|
||||
compiler: clang
|
||||
osx_image: xcode10.1
|
||||
osx_image: xcode10.2
|
||||
env:
|
||||
- TARGET=cpp
|
||||
- GROUP=PARSER
|
||||
stage: extended-test
|
||||
- os: osx
|
||||
compiler: clang
|
||||
osx_image: xcode10.1
|
||||
osx_image: xcode10.2
|
||||
env:
|
||||
- TARGET=cpp
|
||||
- GROUP=RECURSION
|
||||
stage: extended-test
|
||||
- os: osx
|
||||
compiler: clang
|
||||
osx_image: xcode10.1
|
||||
osx_image: xcode10.2
|
||||
env:
|
||||
- TARGET=swift
|
||||
- GROUP=LEXER
|
||||
stage: main-test
|
||||
- os: osx
|
||||
compiler: clang
|
||||
osx_image: xcode10.1
|
||||
osx_image: xcode10.2
|
||||
env:
|
||||
- TARGET=swift
|
||||
- GROUP=PARSER
|
||||
stage: main-test
|
||||
- os: osx
|
||||
compiler: clang
|
||||
osx_image: xcode10.1
|
||||
osx_image: xcode10.2
|
||||
env:
|
||||
- TARGET=swift
|
||||
- GROUP=RECURSION
|
||||
|
@ -122,19 +122,19 @@ matrix:
|
|||
- GROUP=ALL
|
||||
stage: extended-test
|
||||
- os: osx
|
||||
osx_image: xcode10.1
|
||||
osx_image: xcode10.2
|
||||
env:
|
||||
- TARGET=dotnet
|
||||
- GROUP=LEXER
|
||||
stage: extended-test
|
||||
- os: osx
|
||||
osx_image: xcode10.1
|
||||
osx_image: xcode10.2
|
||||
env:
|
||||
- TARGET=dotnet
|
||||
- GROUP=PARSER
|
||||
stage: extended-test
|
||||
- os: osx
|
||||
osx_image: xcode10.1
|
||||
osx_image: xcode10.2
|
||||
env:
|
||||
- TARGET=dotnet
|
||||
- GROUP=RECURSION
|
||||
|
|
|
@ -6,7 +6,7 @@ set -euo pipefail
|
|||
# here since environment variables doesn't pass
|
||||
# across scripts
|
||||
if [ $TRAVIS_OS_NAME == "linux" ]; then
|
||||
export SWIFT_VERSION=swift-4.2.1
|
||||
export SWIFT_VERSION=swift-5.0.1
|
||||
export SWIFT_HOME=$(pwd)/swift/$SWIFT_VERSION-RELEASE-ubuntu16.04/usr/bin/
|
||||
export PATH=$SWIFT_HOME:$PATH
|
||||
|
||||
|
|
|
@ -133,7 +133,7 @@ open func emit() -> Token {
|
|||
private func handleAcceptPositionForIdentifier() -> Bool {
|
||||
let tokenText = getText()
|
||||
var identifierLength = 0
|
||||
while ((identifierLength \< tokenText.characters.count) && isIdentifierChar(tokenText[tokenText.characters.index(tokenText.startIndex, offsetBy: identifierLength)])) {
|
||||
while ((identifierLength \< tokenText.count) && isIdentifierChar(tokenText[tokenText.index(tokenText.startIndex, offsetBy: identifierLength)])) {
|
||||
identifierLength += 1
|
||||
}
|
||||
|
||||
|
@ -147,8 +147,8 @@ private func handleAcceptPositionForIdentifier() -> Bool {
|
|||
}
|
||||
|
||||
private func handleAcceptPositionForKeyword(_ keyword:String) -> Bool {
|
||||
if getInputStream()!.index() > _tokenStartCharIndex + keyword.characters.count {
|
||||
let offset = keyword.characters.count - 1
|
||||
if getInputStream()!.index() > _tokenStartCharIndex + keyword.count {
|
||||
let offset = keyword.count - 1
|
||||
(getInterpreter() as! PositionAdjustingLexerATNSimulator).resetAcceptPosition(getInputStream()!, _tokenStartCharIndex + offset, _tokenStartLine, _tokenStartCharPositionInLine + offset)
|
||||
return true
|
||||
}
|
||||
|
|
|
@ -343,6 +343,8 @@ fileprivate struct UInt8StreamIterator: IteratorProtocol {
|
|||
return nil
|
||||
case .opening, .open, .reading:
|
||||
break
|
||||
@unknown default:
|
||||
fatalError()
|
||||
}
|
||||
|
||||
let count = stream.read(&buffer, maxLength: buffer.count)
|
||||
|
|
|
@ -155,11 +155,9 @@ public class Vocabulary: Hashable {
|
|||
return String(tokenType)
|
||||
}
|
||||
|
||||
public var hashValue: Int {
|
||||
return Unmanaged.passUnretained(self).toOpaque().hashValue
|
||||
// return unsafeAddress(of: self).hashValue
|
||||
public func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(ObjectIdentifier(self))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public func ==(lhs: Vocabulary, rhs: Vocabulary) -> Bool {
|
||||
|
|
|
@ -126,20 +126,11 @@ public class ATNConfig: Hashable, CustomStringConvertible {
|
|||
}
|
||||
}
|
||||
|
||||
///
|
||||
/// An ATN configuration is equal to another if both have
|
||||
/// the same state, they predict the same alternative, and
|
||||
/// syntactic/semantic contexts are the same.
|
||||
///
|
||||
|
||||
public var hashValue: Int {
|
||||
var hashCode = MurmurHash.initialize(7)
|
||||
hashCode = MurmurHash.update(hashCode, state.stateNumber)
|
||||
hashCode = MurmurHash.update(hashCode, alt)
|
||||
hashCode = MurmurHash.update(hashCode, context)
|
||||
hashCode = MurmurHash.update(hashCode, semanticContext)
|
||||
return MurmurHash.finish(hashCode, 4)
|
||||
|
||||
public func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(state.stateNumber)
|
||||
hasher.combine(alt)
|
||||
hasher.combine(context)
|
||||
hasher.combine(semanticContext)
|
||||
}
|
||||
|
||||
public var description: String {
|
||||
|
@ -166,6 +157,11 @@ public class ATNConfig: Hashable, CustomStringConvertible {
|
|||
}
|
||||
}
|
||||
|
||||
///
|
||||
/// An ATN configuration is equal to another if both have
|
||||
/// the same state, they predict the same alternative, and
|
||||
/// syntactic/semantic contexts are the same.
|
||||
///
|
||||
public func ==(lhs: ATNConfig, rhs: ATNConfig) -> Bool {
|
||||
|
||||
if lhs === rhs {
|
||||
|
|
|
@ -203,16 +203,16 @@ public final class ATNConfigSet: Hashable, CustomStringConvertible {
|
|||
return false
|
||||
}
|
||||
|
||||
public var hashValue: Int {
|
||||
public func hash(into hasher: inout Hasher) {
|
||||
if isReadonly() {
|
||||
if cachedHashCode == -1 {
|
||||
cachedHashCode = configsHashValue//configs.hashValue ;
|
||||
cachedHashCode = configsHashValue
|
||||
}
|
||||
|
||||
return cachedHashCode
|
||||
hasher.combine(cachedHashCode)
|
||||
}
|
||||
else {
|
||||
hasher.combine(configsHashValue)
|
||||
}
|
||||
|
||||
return configsHashValue // configs.hashValue;
|
||||
}
|
||||
|
||||
private var configsHashValue: Int {
|
||||
|
|
|
@ -78,8 +78,8 @@ public class ATNDeserializer {
|
|||
///
|
||||
internal func isFeatureSupported(_ feature: UUID, _ actualUuid: UUID) -> Bool {
|
||||
let supported = ATNDeserializer.SUPPORTED_UUIDS
|
||||
guard let featureIndex = supported.index(of: feature),
|
||||
let actualIndex = supported.index(of: actualUuid) else {
|
||||
guard let featureIndex = supported.firstIndex(of: feature),
|
||||
let actualIndex = supported.firstIndex(of: actualUuid) else {
|
||||
return false
|
||||
}
|
||||
return actualIndex >= featureIndex
|
||||
|
|
|
@ -123,11 +123,10 @@ public class ATNState: Hashable, CustomStringConvertible {
|
|||
public internal(set) final var nextTokenWithinRule: IntervalSet?
|
||||
|
||||
|
||||
public var hashValue: Int {
|
||||
return stateNumber
|
||||
public func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(stateNumber)
|
||||
}
|
||||
|
||||
|
||||
public func isNonGreedyExitState() -> Bool {
|
||||
return false
|
||||
}
|
||||
|
|
|
@ -72,22 +72,14 @@ public class LexerATNConfig: ATNConfig {
|
|||
return passedThroughNonGreedyDecision
|
||||
}
|
||||
|
||||
override
|
||||
/*public func hashCode() -> Int {
|
||||
|
||||
}*/
|
||||
public var hashValue: Int {
|
||||
var hashCode = MurmurHash.initialize(7)
|
||||
hashCode = MurmurHash.update(hashCode, state.stateNumber)
|
||||
hashCode = MurmurHash.update(hashCode, alt)
|
||||
hashCode = MurmurHash.update(hashCode, context)
|
||||
hashCode = MurmurHash.update(hashCode, semanticContext)
|
||||
hashCode = MurmurHash.update(hashCode, passedThroughNonGreedyDecision ? 1 : 0)
|
||||
hashCode = MurmurHash.update(hashCode, lexerActionExecutor)
|
||||
return MurmurHash.finish(hashCode, 6)
|
||||
|
||||
public override func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(state.stateNumber)
|
||||
hasher.combine(alt)
|
||||
hasher.combine(context)
|
||||
hasher.combine(semanticContext)
|
||||
hasher.combine(passedThroughNonGreedyDecision)
|
||||
hasher.combine(lexerActionExecutor)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//useless
|
||||
|
|
|
@ -56,7 +56,7 @@ public class LexerAction: Hashable {
|
|||
fatalError(#function + " must be overridden")
|
||||
}
|
||||
|
||||
public var hashValue: Int {
|
||||
public func hash(into hasher: inout Hasher) {
|
||||
fatalError(#function + " must be overridden")
|
||||
}
|
||||
|
||||
|
|
|
@ -176,11 +176,9 @@ public class LexerActionExecutor: Hashable {
|
|||
}
|
||||
|
||||
|
||||
public var hashValue: Int {
|
||||
return self.hashCode
|
||||
public func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(hashCode)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public func ==(lhs: LexerActionExecutor, rhs: LexerActionExecutor) -> Bool {
|
||||
|
|
|
@ -63,12 +63,9 @@ public final class LexerChannelAction: LexerAction, CustomStringConvertible {
|
|||
}
|
||||
|
||||
|
||||
override
|
||||
public var hashValue: Int {
|
||||
var hash = MurmurHash.initialize()
|
||||
hash = MurmurHash.update(hash, getActionType().rawValue)
|
||||
hash = MurmurHash.update(hash, channel)
|
||||
return MurmurHash.finish(hash, 2)
|
||||
public override func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(getActionType())
|
||||
hasher.combine(channel)
|
||||
}
|
||||
|
||||
public var description: String {
|
||||
|
|
|
@ -92,24 +92,17 @@ public final class LexerCustomAction: LexerAction {
|
|||
try lexer.action(nil, ruleIndex, actionIndex)
|
||||
}
|
||||
|
||||
override
|
||||
public var hashValue: Int {
|
||||
var hash = MurmurHash.initialize()
|
||||
hash = MurmurHash.update(hash, getActionType().rawValue)
|
||||
hash = MurmurHash.update(hash, ruleIndex)
|
||||
hash = MurmurHash.update(hash, actionIndex)
|
||||
return MurmurHash.finish(hash, 3)
|
||||
public override func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(ruleIndex)
|
||||
hasher.combine(actionIndex)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public func ==(lhs: LexerCustomAction, rhs: LexerCustomAction) -> Bool {
|
||||
|
||||
if lhs === rhs {
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
return lhs.ruleIndex == rhs.ruleIndex
|
||||
&& lhs.actionIndex == rhs.actionIndex
|
||||
}
|
||||
|
|
|
@ -96,24 +96,17 @@ public final class LexerIndexedCustomAction: LexerAction {
|
|||
}
|
||||
|
||||
|
||||
public override var hashValue: Int {
|
||||
var hash = MurmurHash.initialize()
|
||||
hash = MurmurHash.update(hash, offset)
|
||||
hash = MurmurHash.update(hash, action)
|
||||
return MurmurHash.finish(hash, 2)
|
||||
public override func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(offset)
|
||||
hasher.combine(action)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public func ==(lhs: LexerIndexedCustomAction, rhs: LexerIndexedCustomAction) -> Bool {
|
||||
|
||||
if lhs === rhs {
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
return lhs.offset == rhs.offset
|
||||
&& lhs.action == rhs.action
|
||||
|
||||
}
|
||||
|
|
|
@ -62,25 +62,20 @@ public final class LexerModeAction: LexerAction, CustomStringConvertible {
|
|||
public func execute(_ lexer: Lexer) {
|
||||
lexer.mode(mode)
|
||||
}
|
||||
override
|
||||
public var hashValue: Int {
|
||||
var hash = MurmurHash.initialize()
|
||||
hash = MurmurHash.update(hash, getActionType().rawValue)
|
||||
hash = MurmurHash.update(hash, mode)
|
||||
return MurmurHash.finish(hash, 2)
|
||||
|
||||
public override func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(mode)
|
||||
}
|
||||
|
||||
public var description: String {
|
||||
return "mode(\(mode))"
|
||||
}
|
||||
}
|
||||
|
||||
public func ==(lhs: LexerModeAction, rhs: LexerModeAction) -> Bool {
|
||||
|
||||
if lhs === rhs {
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
return lhs.mode == rhs.mode
|
||||
|
||||
}
|
||||
|
|
|
@ -56,23 +56,15 @@ public final class LexerMoreAction: LexerAction, CustomStringConvertible {
|
|||
}
|
||||
|
||||
|
||||
override
|
||||
public var hashValue: Int {
|
||||
var hash = MurmurHash.initialize()
|
||||
hash = MurmurHash.update(hash, getActionType().rawValue)
|
||||
return MurmurHash.finish(hash, 1)
|
||||
|
||||
public override func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(ObjectIdentifier(self))
|
||||
}
|
||||
|
||||
|
||||
public var description: String {
|
||||
return "more"
|
||||
}
|
||||
}
|
||||
|
||||
public func ==(lhs: LexerMoreAction, rhs: LexerMoreAction) -> Bool {
|
||||
|
||||
return lhs === rhs
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -57,21 +57,15 @@ public final class LexerPopModeAction: LexerAction, CustomStringConvertible {
|
|||
}
|
||||
|
||||
|
||||
override
|
||||
public var hashValue: Int {
|
||||
var hash = MurmurHash.initialize()
|
||||
hash = MurmurHash.update(hash, getActionType().rawValue)
|
||||
return MurmurHash.finish(hash, 1)
|
||||
|
||||
public override func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(ObjectIdentifier(self))
|
||||
}
|
||||
|
||||
public var description: String {
|
||||
return "popMode"
|
||||
}
|
||||
}
|
||||
|
||||
public func ==(lhs: LexerPopModeAction, rhs: LexerPopModeAction) -> Bool {
|
||||
|
||||
return lhs === rhs
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -63,15 +63,10 @@ public final class LexerPushModeAction: LexerAction, CustomStringConvertible {
|
|||
lexer.pushMode(mode)
|
||||
}
|
||||
|
||||
|
||||
override
|
||||
public var hashValue: Int {
|
||||
var hash = MurmurHash.initialize()
|
||||
hash = MurmurHash.update(hash, getActionType().rawValue)
|
||||
hash = MurmurHash.update(hash, mode)
|
||||
return MurmurHash.finish(hash, 2)
|
||||
|
||||
public override func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(mode)
|
||||
}
|
||||
|
||||
public var description: String {
|
||||
return "pushMode(\(mode))"
|
||||
}
|
||||
|
@ -79,10 +74,8 @@ public final class LexerPushModeAction: LexerAction, CustomStringConvertible {
|
|||
|
||||
|
||||
public func ==(lhs: LexerPushModeAction, rhs: LexerPushModeAction) -> Bool {
|
||||
|
||||
if lhs === rhs {
|
||||
return true
|
||||
}
|
||||
|
||||
return lhs.mode == rhs.mode
|
||||
}
|
||||
|
|
|
@ -56,19 +56,15 @@ public final class LexerSkipAction: LexerAction, CustomStringConvertible {
|
|||
}
|
||||
|
||||
|
||||
override
|
||||
public var hashValue: Int {
|
||||
var hash = MurmurHash.initialize()
|
||||
hash = MurmurHash.update(hash, getActionType().rawValue)
|
||||
return MurmurHash.finish(hash, 1)
|
||||
public override func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(ObjectIdentifier(self))
|
||||
}
|
||||
|
||||
public var description: String {
|
||||
return "skip"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public func ==(lhs: LexerSkipAction, rhs: LexerSkipAction) -> Bool {
|
||||
|
||||
return lhs === rhs
|
||||
}
|
||||
|
|
|
@ -62,24 +62,18 @@ public class LexerTypeAction: LexerAction, CustomStringConvertible {
|
|||
}
|
||||
|
||||
|
||||
override
|
||||
public var hashValue: Int {
|
||||
var hash = MurmurHash.initialize()
|
||||
hash = MurmurHash.update(hash, getActionType().rawValue)
|
||||
hash = MurmurHash.update(hash, type)
|
||||
return MurmurHash.finish(hash, 2)
|
||||
public override func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(type)
|
||||
}
|
||||
|
||||
public var description: String {
|
||||
return "type(\(type))"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public func ==(lhs: LexerTypeAction, rhs: LexerTypeAction) -> Bool {
|
||||
|
||||
if lhs === rhs {
|
||||
return true
|
||||
}
|
||||
|
||||
return lhs.type == rhs.type
|
||||
}
|
||||
|
|
|
@ -20,17 +20,12 @@ public class LookupATNConfig: Hashable {
|
|||
// dup
|
||||
config = old
|
||||
}
|
||||
public var hashValue: Int {
|
||||
|
||||
var hashCode: Int = 7
|
||||
hashCode = 31 * hashCode + config.state.stateNumber
|
||||
hashCode = 31 * hashCode + config.alt
|
||||
hashCode = 31 * hashCode + config.semanticContext.hashValue
|
||||
return hashCode
|
||||
|
||||
public func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(config.state.stateNumber)
|
||||
hasher.combine(config.alt)
|
||||
hasher.combine(config.semanticContext)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public func ==(lhs: LookupATNConfig, rhs: LookupATNConfig) -> Bool {
|
||||
|
|
|
@ -105,8 +105,8 @@ public class PredictionContext: Hashable, CustomStringConvertible {
|
|||
return getReturnState(size() - 1) == PredictionContext.EMPTY_RETURN_STATE
|
||||
}
|
||||
|
||||
public final var hashValue: Int {
|
||||
return cachedHashCode
|
||||
public func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(cachedHashCode)
|
||||
}
|
||||
|
||||
static func calculateEmptyHashCode() -> Int {
|
||||
|
|
|
@ -61,7 +61,7 @@ public class SemanticContext: Hashable, CustomStringConvertible {
|
|||
return self
|
||||
}
|
||||
|
||||
public var hashValue: Int {
|
||||
public func hash(into hasher: inout Hasher) {
|
||||
fatalError(#function + " must be overridden")
|
||||
}
|
||||
|
||||
|
@ -94,16 +94,12 @@ public class SemanticContext: Hashable, CustomStringConvertible {
|
|||
return try parser.sempred(localctx, ruleIndex, predIndex)
|
||||
}
|
||||
|
||||
override
|
||||
public var hashValue: Int {
|
||||
var hashCode = MurmurHash.initialize()
|
||||
hashCode = MurmurHash.update(hashCode, ruleIndex)
|
||||
hashCode = MurmurHash.update(hashCode, predIndex)
|
||||
hashCode = MurmurHash.update(hashCode, isCtxDependent ? 1 : 0)
|
||||
return MurmurHash.finish(hashCode, 3)
|
||||
public override func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(ruleIndex)
|
||||
hasher.combine(predIndex)
|
||||
hasher.combine(isCtxDependent)
|
||||
}
|
||||
|
||||
|
||||
override
|
||||
public var description: String {
|
||||
return "{\(ruleIndex):\(predIndex)}?"
|
||||
|
@ -138,11 +134,8 @@ public class SemanticContext: Hashable, CustomStringConvertible {
|
|||
}
|
||||
|
||||
|
||||
override
|
||||
public var hashValue: Int {
|
||||
var hashCode: Int = 1
|
||||
hashCode = 31 * hashCode + precedence
|
||||
return hashCode
|
||||
public override func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(precedence)
|
||||
}
|
||||
|
||||
override
|
||||
|
@ -214,12 +207,8 @@ public class SemanticContext: Hashable, CustomStringConvertible {
|
|||
}
|
||||
|
||||
|
||||
override
|
||||
public var hashValue: Int {
|
||||
//MurmurHash.hashCode(opnds, AND.class.hashCode());
|
||||
let seed = 1554547125
|
||||
//NSStringFromClass(AND.self).hashValue
|
||||
return MurmurHash.hashCode(opnds, seed)
|
||||
public override func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(opnds)
|
||||
}
|
||||
|
||||
///
|
||||
|
@ -323,11 +312,8 @@ public class SemanticContext: Hashable, CustomStringConvertible {
|
|||
return opnds
|
||||
}
|
||||
|
||||
|
||||
override
|
||||
public var hashValue: Int {
|
||||
|
||||
return MurmurHash.hashCode(opnds, NSStringFromClass(OR.self).hashValue)
|
||||
public override func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(opnds)
|
||||
}
|
||||
|
||||
///
|
||||
|
|
|
@ -109,10 +109,8 @@ public final class DFAState: Hashable, CustomStringConvertible {
|
|||
}
|
||||
|
||||
|
||||
public var hashValue: Int {
|
||||
var hash = MurmurHash.initialize(7)
|
||||
hash = MurmurHash.update(hash, configs.hashValue)
|
||||
return MurmurHash.finish(hash, 1)
|
||||
public func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(configs)
|
||||
}
|
||||
|
||||
public var description: String {
|
||||
|
|
|
@ -1053,7 +1053,7 @@ public class BitSet: Hashable, CustomStringConvertible {
|
|||
///
|
||||
/// - returns: the hash code value for this bit set
|
||||
///
|
||||
public var hashValue: Int {
|
||||
private var hashCode: Int {
|
||||
var h: Int64 = 1234
|
||||
var i: Int = wordsInUse
|
||||
i -= 1
|
||||
|
@ -1065,6 +1065,10 @@ public class BitSet: Hashable, CustomStringConvertible {
|
|||
return Int(Int32((h >> 32) ^ h))
|
||||
}
|
||||
|
||||
public func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(hashCode)
|
||||
}
|
||||
|
||||
///
|
||||
/// Returns the number of bits of space actually in use by this
|
||||
/// `BitSet` to represent bit values.
|
||||
|
|
|
@ -62,12 +62,11 @@ public class Interval: Hashable {
|
|||
}
|
||||
|
||||
|
||||
public var hashValue: Int {
|
||||
var hash: Int = 23
|
||||
hash = hash * 31 + a
|
||||
hash = hash * 31 + b
|
||||
return hash
|
||||
public func hash(into hasher: inout Hasher) {
|
||||
hasher.combine(a)
|
||||
hasher.combine(b)
|
||||
}
|
||||
|
||||
///
|
||||
/// Does this start completely before other? Disjoint
|
||||
///
|
||||
|
|
|
@ -470,25 +470,13 @@ public class IntervalSet: IntSet, Hashable, CustomStringConvertible {
|
|||
return intervals
|
||||
}
|
||||
|
||||
|
||||
public func hashCode() -> Int {
|
||||
var hash = MurmurHash.initialize()
|
||||
for I: Interval in intervals {
|
||||
hash = MurmurHash.update(hash, I.a)
|
||||
hash = MurmurHash.update(hash, I.b)
|
||||
public func hash(into hasher: inout Hasher) {
|
||||
for interval in intervals {
|
||||
hasher.combine(interval.a)
|
||||
hasher.combine(interval.b)
|
||||
}
|
||||
}
|
||||
|
||||
return MurmurHash.finish(hash, intervals.count * 2)
|
||||
}
|
||||
public var hashValue: Int {
|
||||
var hash = MurmurHash.initialize()
|
||||
for I: Interval in intervals {
|
||||
hash = MurmurHash.update(hash, I.a)
|
||||
hash = MurmurHash.update(hash, I.b)
|
||||
}
|
||||
|
||||
return MurmurHash.finish(hash, intervals.count * 2)
|
||||
}
|
||||
///
|
||||
/// Are two IntervalSets equal? Because all intervals are sorted
|
||||
/// and disjoint, equals is a simple linear walk over both lists
|
||||
|
|
Loading…
Reference in New Issue