From 32ce6a71feadf1b1dfe8ea7b5151cc48fc4194af Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Tue, 15 Jun 2021 16:02:14 +0200 Subject: [PATCH] Implement set with HashSet rather than CountTable I didn't know HashSet was a thing. --- src/preserves.nim | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/preserves.nim b/src/preserves.nim index ef98bd3..c0215f5 100644 --- a/src/preserves.nim +++ b/src/preserves.nim @@ -1,6 +1,6 @@ # SPDX-License-Identifier: ISC -import base64, endians, json, hashes, tables, streams +import base64, endians, json, hashes, sets, streams, tables import bigints type @@ -33,7 +33,7 @@ type of pkSequence: seq*: seq[Preserve[T]] of pkSet: - set*: CountTable[Preserve[T]] + set*: HashSet[Preserve[T]] of pkDictionary: dict*: Table[Preserve[T], Preserve[T]] of pkEmbedded: @@ -76,7 +76,7 @@ proc `$`*[T](prs: Preserve[T]): string = result.add(']') of pkSet: result.add("#{") - for val in prs.set.keys: + for val in prs.set: result.add($val) result.add(' ') if result.len > 1: @@ -208,10 +208,10 @@ proc `==`*[T](x, y: Preserve[T]): bool = if y.seq[i] != val: return false result = true of pkSet: - for val in x.set.keys: - if not y.set.hasKey(val): return false - for val in y.set.keys: - if not x.set.hasKey(val): return false + for val in x.set: + if not y.set.contains(val): return false + for val in y.set: + if not x.set.contains(val): return false result = true of pkDictionary: for (key, val) in x.dict.pairs: @@ -248,7 +248,7 @@ proc hash*[T](prs: Preserve[T]): Hash = for val in prs.seq: h = h !& hash(val) of pkSet: - for val in prs.set.keys: + for val in prs.set: h = h !& hash(val) of pkDictionary: for (key, val) in prs.dict.pairs: @@ -359,8 +359,8 @@ proc write*[T](str: Stream; prs: Preserve[T]) = str.write(0x84'u8) of pkSet: str.write(0xb6'u8) - for key in prs.set.keys: - str.write(key) + for val in prs.set.items: + str.write(val) str.write(0x84'u8) of pkDictionary: str.write(0xb7'u8) @@ -423,8 +423,8 @@ proc parsePreserve*(s: Stream): Preserve[void] = of 0xb6: result = Preserve[void](kind: pkSet) while s.peekUint8() != endMarker: - let key = s.parsePreserve() - result.set[key] = 0 + let val = s.parsePreserve() + result.set.incl(val) discard s.readUint8() of 0xb7: result = Preserve[void](kind: pkDictionary)