1
0
mirror of git://jb55.com/damus synced 2024-09-05 21:03:51 +00:00
damus/nostrdb/NdbTagIterator.swift
2023-07-25 16:22:25 -07:00

59 lines
1.2 KiB
Swift

//
// NdbTagIterators.swift
// damus
//
// Created by William Casarin on 2023-07-21.
//
import Foundation
struct TagSequence: Sequence {
let note: NdbNote
let tag: UnsafeMutablePointer<ndb_tag>
var count: UInt16 {
tag.pointee.count
}
func strings() -> [String] {
return self.map { $0.string() }
}
subscript(index: Int) -> NdbTagElem {
precondition(index < count, "Index out of bounds")
return NdbTagElem(note: note, tag: tag, index: Int32(index))
}
func makeIterator() -> TagIterator {
return TagIterator(note: note, tag: tag)
}
}
struct TagIterator: IteratorProtocol {
typealias Element = NdbTagElem
mutating func next() -> NdbTagElem? {
guard index < tag.pointee.count else { return nil }
let el = NdbTagElem(note: note, tag: tag, index: index)
index += 1
return el
}
var index: Int32
let note: NdbNote
var tag: UnsafeMutablePointer<ndb_tag>
var count: UInt16 {
tag.pointee.count
}
init(note: NdbNote, tag: UnsafeMutablePointer<ndb_tag>) {
self.note = note
self.tag = tag
self.index = 0
}
}