/*
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 { StreamingIndicatorCalculationStrategy } from "./StreamingIndicatorCalculationStrategy";
import { String_$type, fromEnum, toEnum, markType } from "igniteui-react-core/ES2015/type";
import { List$1 } from "igniteui-react-core/ES2015/List$1";
export class RelativeStrengthIndexIndicatorStrategy extends StreamingIndicatorCalculationStrategy {
    b(a, b) {
        let c = new List$1(String_$type, 0);
        c.add("CloseColumn");
        return c;
    }
    a(a, b) {
        let c = 0;
        for (let d of fromEnum(this.c(a, b))) {
            a.indicatorColumn.item(c, d);
            c++;
        }
        return true;
    }
    *_c(a, b) {
        let c = a.period;
        let d = 2 / (c + 1);
        let e = 0;
        let f = 0;
        let g = a.indicatorColumn;
        let h = a.closeColumn;
        if (g.count > 0) {
            yield 0;
        }
        for (let i = 1; i < Math.min(a.period, g.count); ++i) {
            let j = h.item(i) - h.item(i - 1);
            let k = j > 0 ? j : 0;
            let l = j > 0 ? 0 : -j;
            e += k / (c - 1);
            f += l / (c - 1);
            yield 0;
        }
        for (let m = a.period; m < g.count; ++m) {
            let n = h.item(m) - h.item(m - 1);
            let o = n > 0 ? n : 0;
            let p = n > 0 ? 0 : -n;
            e = (e * (c - 1) + o) / c;
            f = (f * (c - 1) + p) / c;
            yield b.i(e != 0 ? 100 * e / (e + f) : 0);
        }
    }
    c(a, b) {
        return toEnum(() => this._c(a, b));
    }
}
RelativeStrengthIndexIndicatorStrategy.$t = markType(RelativeStrengthIndexIndicatorStrategy, 'RelativeStrengthIndexIndicatorStrategy', StreamingIndicatorCalculationStrategy.$);
