1
Я искал и не мог найти пример использования CFBinaryHeap из кода Swift, поэтому я отправляю свой пример в качестве ответа ниже.Как использовать CFBinaryHeap в Swift?
Я искал и не мог найти пример использования CFBinaryHeap из кода Swift, поэтому я отправляю свой пример в качестве ответа ниже.Как использовать CFBinaryHeap в Swift?
Вот пример, который использует CFBinaryHeap для хранения структур Foo из Swift, отсортированных по целочисленному свойству.
struct Foo {
var x : Int = 0
}
var callbacks = CFBinaryHeapCallBacks()
// <Foo> comparator
callbacks.compare = { (a,b,unused) in
let afoo : Foo = UnsafePointer<Foo>(a).memory
let bfoo : Foo = UnsafePointer<Foo>(b).memory
if (afoo.x == bfoo.x) { return CFComparisonResult.CompareEqualTo }
if (afoo.x > bfoo.x) { return CFComparisonResult.CompareGreaterThan }
return CFComparisonResult.CompareLessThan
}
let callbackPointer = UnsafeMutablePointer<CFBinaryHeapCallBacks>.alloc(1)
callbackPointer.initialize(callbacks)
var bh = CFBinaryHeapCreate(nil, 0, callbackPointer, nil)
var fooPointer : UnsafeMutablePointer<Foo>!
fooPointer = UnsafeMutablePointer<Foo>.alloc(1)
fooPointer.initialize(Foo(x: 42))
CFBinaryHeapAddValue(bh, fooPointer)
fooPointer = UnsafeMutablePointer<Foo>.alloc(1)
fooPointer.initialize(Foo(x: 99))
CFBinaryHeapAddValue(bh, fooPointer)
fooPointer = UnsafeMutablePointer<Foo>.alloc(1)
fooPointer.initialize(Foo(x: 2))
CFBinaryHeapAddValue(bh, fooPointer)
var got = UnsafePointer<Foo>(CFBinaryHeapGetMinimum(bh))
got.memory.x // 2
CFBinaryHeapRemoveMinimumValue(bh)
got = UnsafePointer<Foo>(CFBinaryHeapGetMinimum(bh))
got.memory.x // 42
CFBinaryHeapRemoveMinimumValue(bh)
got = UnsafePointer<Foo>(CFBinaryHeapGetMinimum(bh))
got.memory.x // 99
CFBinaryHeapRemoveMinimumValue(bh)
Вы никогда не освобождали память – newacct