1
0
mirror of git://jb55.com/damus synced 2024-09-18 19:23:49 +00:00
damus/nostrdb/NdbTagsIterator.swift
William Casarin 58e2fb40ef iter: make safer by using NdbNote instead of unsafe pointers
If we have an owned note, we could lose track of the lifetime and then
crash. Let's make sure we always have an NdbNote instead
2023-07-22 17:19:47 -07:00

47 lines
908 B
Swift

//
// NdbTagsIterator.swift
// damus
//
// Created by William Casarin on 2023-07-21.
//
import Foundation
struct TagsIterator: IteratorProtocol {
typealias Element = TagSequence
var done: Bool
var iter: ndb_iterator
var note: NdbNote
mutating func next() -> TagSequence? {
guard !done else { return nil }
let tag_seq = TagSequence(note: note, tag: self.iter.tag)
let ok = ndb_tags_iterate_next(&self.iter)
done = ok == 0
return tag_seq
}
var count: UInt16 {
return iter.tag.pointee.count
}
init(note: NdbNote) {
self.iter = ndb_iterator()
let res = ndb_tags_iterate_start(note.note, &self.iter)
self.done = res == 0
self.note = note
}
}
struct TagsSequence: Sequence {
let note: NdbNote
func makeIterator() -> TagsIterator {
return .init(note: note)
}
}