init()

in Datasets/COCO/COCO.swift [516:597]


    init(merging rles: [RLE], intersect: Bool) {
        var c: UInt32
        var ca: UInt32
        var cb: UInt32
        var cc: UInt32
        var ct: UInt32
        var v: Bool
        var va: Bool
        var vb: Bool
        var vp: Bool
        var a: Int
        var b: Int
        var w: Int = rles[0].width
        var h: Int = rles[0].height
        var m: Int = rles[0].m
        var A: RLE
        var B: RLE
        let n = rles.count
        if n == 0 {
            self.init(width: 0, height: 0, m: 0, counts: [])
            return
        }
        if n == 1 {
            self.init(width: w, height: h, m: m, counts: rles[0].counts)
            return
        }
        var cnts = [UInt32](repeating: 0, count: h * w + 1)
        for a in 0..<m {
            cnts[a] = rles[0].counts[a]
        }
        for i in 1..<n {
            B = rles[i]
            if B.height != h || B.width != w {
                h = 0
                w = 0
                m = 0
                break
            }
            A = RLE(width: w, height: h, m: m, counts: cnts)
            ca = A.counts[0]
            cb = B.counts[0]
            v = false
            va = false
            vb = false
            m = 0
            a = 1
            b = 1
            cc = 0
            ct = 1
            while ct > 0 {
                c = min(ca, cb)
                cc += c
                ct = 0
                ca -= c
                if ca == 0 && a < A.m {
                    ca = A.counts[a]
                    a += 1
                    va = !va
                }
                ct += ca
                cb -= c
                if cb == 0 && b < B.m {
                    cb = B.counts[b]
                    b += 1
                    vb = !vb
                }
                ct += cb
                vp = v
                if intersect {
                    v = va && vb
                } else {
                    v = va || vb
                }
                if v != vp || ct == 0 {
                    cnts[m] = cc
                    m += 1
                    cc = 0
                }
            }
        }
        self.init(width: w, height: h, m: m, counts: cnts)
    }