/*
THIS INFRAGISTICS ULTIMATE SOFTWARE LICENSE  AGREEMENT ("AGREEMENT") LOCATED HERE:
https://www.infragistics.com/legal/license/igultimate-la
https://www.infragistics.com/legal/license/igultimate-eula
GOVERNS THE LICENSING, INSTALLATION AND USE OF INFRAGISTICS SOFTWARE. BY DOWNLOADING AND/OR INSTALLING AND USING INFRAGISTICS SOFTWARE:  you are indicating that you have read and understand this Agreement, and agree to be legally bound by it on behalf of the yourself and your company.
*/
import { Base, markType } from "./type";
import { List$1 } from "./List$1";
import { SectionData } from "./SectionData";
import { SectionDataStartIndexComparer } from "./SectionDataStartIndexComparer";
import { SectionDataUndisplacedStartIndexComparer } from "./SectionDataUndisplacedStartIndexComparer";
import { SectionSearchData } from "./SectionSearchData";
/**
 * @hidden
 */
export let SectionMap = /*@__PURE__*/ (() => {
    class SectionMap extends Base {
        constructor() {
            super();
            this.a = new SectionData();
            this.j = new SectionDataStartIndexComparer();
            this.k = new SectionDataUndisplacedStartIndexComparer();
            this.s = new List$1(SectionData.$, 0);
            this.m = new SectionSearchData();
            this.l = new SectionSearchData();
        }
        get t() {
            return this.s;
        }
        get u() {
            return this.s._inner[this.s.count - 1].ad + 1;
        }
        get q() {
            return this.t.count > 0;
        }
        n(a, b, c) {
            if (a >= 0 && a < this.s.count) {
                let d = this.s._inner[a];
                if (b >= d.af && b <= d.ad) {
                    c.c++;
                    if (c.c >= c.a.length) {
                        c.c = 0;
                    }
                    c.b[c.c] = a;
                    c.a[c.c] = d;
                    return true;
                }
            }
            return false;
        }
        o(a, b, c) {
            if (a >= 0 && a < this.s.count) {
                let d = this.s._inner[a];
                if (b >= d.ac && b <= d.ab) {
                    c.c++;
                    if (c.c >= c.a.length) {
                        c.c = 0;
                    }
                    c.b[c.c] = a;
                    c.a[c.c] = d;
                    return true;
                }
            }
            return false;
        }
        e(a) {
            return this.f(a, this.j, this.m);
        }
        f(a, b, c) {
            if (c.a == null) {
                c.a = new Array(5);
                c.b = new Array(5);
                for (let d = 0; d < c.a.length; d++) {
                    c.a[d] = null;
                    c.b[d] = -1;
                }
            }
            if (c.a[c.c] != null) {
                if (a >= c.a[c.c].af && a <= c.a[c.c].ad) {
                    return c.a[c.c];
                }
                for (let e = 0; e < c.a.length; e++) {
                    if (c.a[e] != null) {
                        if (a >= c.a[e].af && a <= c.a[e].ad) {
                            c.c = e;
                            return c.a[c.c];
                        }
                    }
                }
                let f = c.b[c.c] + 1;
                if (this.n(f, a, c)) {
                    return c.a[c.c];
                }
                f = c.b[c.c] - 1;
                if (this.n(f, a, c)) {
                    return c.a[c.c];
                }
            }
            this.a.af = a;
            let g = this.s.g(this.a, b);
            if (g < 0) {
                g = ~g;
                g--;
            }
            if (this.n(g, a, c)) {
                return c.a[c.c];
            }
            if (this.n(g + 1, a, c)) {
                return c.a[c.c];
            }
            if (this.n(g - 1, a, c)) {
                return c.a[c.c];
            }
            return null;
        }
        h(a, b, c) {
            if (c.a == null) {
                c.a = new Array(5);
                c.b = new Array(5);
                for (let d = 0; d < c.a.length; d++) {
                    c.a[d] = null;
                    c.b[d] = -1;
                }
            }
            if (c.a[c.c] != null) {
                let e = c.a[c.c];
                if (a >= e.ac && a <= e.ab) {
                    return e;
                }
                for (let f = 0; f < c.a.length; f++) {
                    if (c.a[f] != null) {
                        if (a >= c.a[f].ac && a <= c.a[f].ab) {
                            c.c = f;
                            return c.a[c.c];
                        }
                    }
                }
                let g = c.b[c.c] + 1;
                if (this.o(g, a, c)) {
                    return c.a[c.c];
                }
                g = c.b[c.c] - 1;
                if (this.o(g, a, c)) {
                    return c.a[c.c];
                }
            }
            this.a.af = a;
            let h = this.s.g(this.a, b);
            if (h < 0) {
                h = ~h;
                h--;
            }
            if (this.o(h, a, c)) {
                return c.a[c.c];
            }
            if (this.o(h + 1, a, c)) {
                return c.a[c.c];
            }
            if (this.o(h - 1, a, c)) {
                return c.a[c.c];
            }
            return null;
        }
        v() {
            this.s.clear();
            this.m.a = null;
            this.l.a = null;
        }
        ac(a, b, c) {
            for (let d = a.ae + 1; d < this.s.count; d++) {
                let e = this.s._inner[d];
                e.u += c;
                e.af += b;
                e.ad += b;
                for (let f = 0; f < e.h.length; f++) {
                    if (e.h[f] != -1) {
                        e.h[f] += b;
                    }
                }
            }
        }
        ab(a, b, c) {
            for (let d = a.ae; d < this.s.count; d++) {
                let e = this.s._inner[d];
                e.u += c;
                e.af += b;
                e.ad += b;
                e.ae = d;
                for (let f = 0; f < e.h.length; f++) {
                    if (e.h[f] != -1) {
                        e.h[f] += b;
                    }
                }
            }
        }
        x(a) {
            if (this.s.count == 0) {
                return;
            }
            let b = this.s._inner[this.s.count - 1];
            b.ad = a;
        }
        i(a, b, c, d, e, f) {
            let g = this.b(b, c, d, e, f);
            g.af = a;
            g.ae = this.s.count;
            if (this.s.count > 0) {
                g.u = this.s._inner[this.s.count - 1].u;
            }
            this.s.add(g);
            return g;
        }
        b(a, b, c, d, e) {
            let f = new SectionData();
            f.e = c;
            f.d = new Array(c.length);
            let g = new Array(c.length);
            for (let h = 0; h < g.length; h++) {
                f.d[h] = 0;
                g[h] = a.getItemProperty(b, c[h]);
            }
            f.f = g;
            f.ai(d, e);
            let i = d == 1 ? c.length : 1;
            f.b = new Array(i);
            f.h = new Array(i);
            f.j = new Array(i);
            for (let j = 0; j < i; j++) {
                f.h[j] = -1;
                f.j[j] = new Array(a.summaryDescriptions.k.count);
            }
            f.g = new Array(c.length);
            return f;
        }
        ad(a, b, c) {
            for (let d = a.ae + 1; d < this.s.count; d++) {
                this.s._inner[d].ae = d;
                this.s._inner[d].u += c;
                this.s._inner[d].af += b;
                this.s._inner[d].ad += b;
                for (let e = 0; e < this.s._inner[d].h.length; e++) {
                    if (this.s._inner[d].h[e] != -1) {
                        this.s._inner[d].h[e] += b;
                    }
                }
            }
        }
        aa(a, b) {
            this.s.insert(a, b);
        }
        ae(a) {
            if (this.m != null) {
                let b = this.m;
                SectionMap.w(a, b);
            }
            if (this.l != null) {
                let c = this.l;
                SectionMap.w(a, c);
            }
            this.s._inner[a].p = true;
            this.s.removeAt(a);
        }
        static w(a, b) {
            if (b.a != null) {
                for (let c = 0; c < b.a.length; c++) {
                    if (b.a[c] != null) {
                        if (b.a[c].ae == a) {
                            b.a[c] = null;
                        }
                    }
                }
            }
        }
        d() {
            return this.s._inner[this.s.count - 1];
        }
        c() {
            return this.s._inner[0];
        }
        y() {
            this.s._inner[this.s.count - 1].u++;
        }
        g(a) {
            return this.h(a, this.k, this.l);
        }
        p(a) {
            for (let b = 0; b < this.t.count; b++) {
                if (b == a.ae) {
                    continue;
                }
                if (this.t._inner[b].z == a.ae) {
                    return true;
                }
            }
            return false;
        }
        z(a, b) {
            if (a.e == null) {
                a.d[0] += b;
                return;
            }
            if (a.z == -1) {
                for (let c = 0; c < a.e.length; c++) {
                    a.d[c] += b;
                }
            }
            else {
                let d = a.x();
                for (let e = a.x(); e < a.e.length; e++) {
                    a.d[e] += b;
                }
                let f = a.z;
                while (f >= 0) {
                    let g = this.t._inner[f];
                    let h = g.x();
                    g.d[h] += b;
                    f = g.z;
                }
            }
        }
        af(a, b) {
            for (let c = 0; c < a.ae; c++) {
                let d = this.s._inner[c];
                for (let e = 0; e < a.e.length; e++) {
                    if (d.a[e] != null && (d.f[e] == a.f[e] || Base.equalsStatic(d.f[e], a.f[e]))) {
                        a.z = c;
                        a.a[e] = null;
                    }
                }
            }
        }
        r(a) {
            let b = a.x();
            if (b == 0) {
                return true;
            }
            let c = this.s._inner[a.z];
            for (let d = b - 1; d >= 0; d--) {
                if (!c.c[d]) {
                    return false;
                }
            }
            return this.r(c);
        }
    }
    SectionMap.$t = /*@__PURE__*/ markType(SectionMap, 'SectionMap');
    return SectionMap;
})();
//# sourceMappingURL=SectionMap.js.map
