PHP WebShell

Текущая директория: /usr/lib/node_modules/bitgo-express/node_modules/ripple-lib/dist/npm/common

Просмотр файла: rangeset.js

'use strict'; // eslint-disable-line strict

var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

var _ = require('lodash');
var assert = require('assert');
var ranges = Symbol();

function mergeIntervals(intervals) {
  var stack = [[-Infinity, -Infinity]];
  _.forEach(_.sortBy(intervals, function (x) {
    return x[0];
  }), function (interval) {
    var lastInterval = stack.pop();
    if (interval[0] <= lastInterval[1] + 1) {
      stack.push([lastInterval[0], Math.max(interval[1], lastInterval[1])]);
    } else {
      stack.push(lastInterval);
      stack.push(interval);
    }
  });
  return stack.slice(1);
}

var RangeSet = function () {
  function RangeSet() {
    _classCallCheck(this, RangeSet);

    this.reset();
  }

  _createClass(RangeSet, [{
    key: 'reset',
    value: function reset() {
      this[ranges] = [];
    }
  }, {
    key: 'serialize',
    value: function serialize() {
      return this[ranges].map(function (range) {
        return range[0].toString() + '-' + range[1].toString();
      }).join(',');
    }
  }, {
    key: 'addRange',
    value: function addRange(start, end) {
      assert(start <= end, 'invalid range');
      this[ranges] = mergeIntervals(this[ranges].concat([[start, end]]));
    }
  }, {
    key: 'addValue',
    value: function addValue(value) {
      this.addRange(value, value);
    }
  }, {
    key: 'parseAndAddRanges',
    value: function parseAndAddRanges(rangesString) {
      var _this = this;

      var rangeStrings = rangesString.split(',');
      _.forEach(rangeStrings, function (rangeString) {
        var range = rangeString.split('-').map(Number);
        _this.addRange(range[0], range.length === 1 ? range[0] : range[1]);
      });
    }
  }, {
    key: 'containsRange',
    value: function containsRange(start, end) {
      return _.some(this[ranges], function (range) {
        return range[0] <= start && range[1] >= end;
      });
    }
  }, {
    key: 'containsValue',
    value: function containsValue(value) {
      return this.containsRange(value, value);
    }
  }]);

  return RangeSet;
}();

module.exports.RangeSet = RangeSet;

Выполнить команду


Для локальной разработки. Не используйте в интернете!