Skip to content

Commit 48f985b

Browse files
authored
Merge pull request #14 from adamnemecek/leakfix
fixed iterator memory leak
2 parents 90a5a77 + b98e5c1 commit 48f985b

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

Sources/SwiftRoaring/RoaringBitmap.swift

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -953,24 +953,30 @@ public final class RoaringBitmap: Sequence, Equatable, CustomStringConvertible,
953953
///
954954
/// Creates a RoaringBitmapIterator.
955955
///
956+
@inlinable @inline(__always)
956957
public func makeIterator() -> RoaringBitmapIterator {
957958
return RoaringBitmapIterator(ptr: self.ptr)
958959
}
959960

960961
///
961962
/// Structure used to iterate through values in a roaring bitmap
962963
///
964+
@frozen
963965
public struct RoaringBitmapIterator: IteratorProtocol {
964-
private var i: UnsafeMutablePointer<roaring_uint32_iterator_t>
966+
@usableFromInline
967+
internal var i: roaring_uint32_iterator_t
965968

966-
init(ptr: UnsafeMutablePointer<roaring_bitmap_t>) {
967-
self.i = croaring.roaring_create_iterator(ptr)
969+
@inlinable @inline(__always)
970+
init(ptr: UnsafePointer<roaring_bitmap_t>) {
971+
self.i = roaring_uint32_iterator_t()
972+
roaring_init_iterator(ptr, &self.i)
968973
}
969974

970-
mutating public func next() -> UInt32? {
971-
guard i.pointee.has_value else { return nil }
972-
let val = i.pointee.current_value
973-
croaring.roaring_advance_uint32_iterator(self.i)
975+
@inlinable @inline(__always)
976+
public mutating func next() -> UInt32? {
977+
guard i.has_value else { return nil }
978+
let val = i.current_value
979+
croaring.roaring_advance_uint32_iterator(&self.i)
974980
return val
975981
}
976982
}

0 commit comments

Comments
 (0)