/**
 * DevExtreme (renovation/ui/scheduler/utils/semaphore/scrollSemaphore.js)
 * Version: 23.1.6 (build 23316-0110)
 * Build date: Sun Nov 12 2023
 *
 * Copyright (c) 2012 - 2023 Developer Express Inc. ALL RIGHTS RESERVED
 * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
 */
"use strict";
exports.ScrollSemaphore = void 0;
var _semaphore = require("./semaphore");
var ScrollSemaphore = function() {
    function ScrollSemaphore() {
        this.semaphore = new _semaphore.Semaphore;
        this.position = {
            left: -1,
            top: -1
        }
    }
    var _proto = ScrollSemaphore.prototype;
    _proto.isFree = function(position) {
        if (this.isInitialPosition()) {
            this.setPosition(position);
            return this.semaphore.isFree()
        }
        return this.semaphore.isFree() && !this.comparePosition(position)
    };
    _proto.take = function(position) {
        this.semaphore.take();
        this.setPosition(position)
    };
    _proto.release = function() {
        this.semaphore.release()
    };
    _proto.setPosition = function(source) {
        var _source$left, _source$top;
        this.position.left = null !== (_source$left = source.left) && void 0 !== _source$left ? _source$left : -1;
        this.position.top = null !== (_source$top = source.top) && void 0 !== _source$top ? _source$top : -1
    };
    _proto.isInitialPosition = function() {
        return -1 === this.position.left && -1 === this.position.top
    };
    _proto.comparePosition = function(target) {
        var _target$left, _target$top;
        var left = null !== (_target$left = target.left) && void 0 !== _target$left ? _target$left : -1;
        var top = null !== (_target$top = target.top) && void 0 !== _target$top ? _target$top : -1;
        return this.position.left === left && this.position.top === top
    };
    return ScrollSemaphore
}();
exports.ScrollSemaphore = ScrollSemaphore;
