2015-08-23 4 views

ответ

0

Вот пример, который использует 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) 
+1

Вы никогда не освобождали память – newacct

 Смежные вопросы

  • Нет связанных вопросов^_^