jscc-parser
Version:
A LALR(1) Parser Generator for JavaScript written in JavaScript.
72 lines (71 loc) • 2.13 kB
JavaScript
/*
* Universal module definition for a bitset implementation backed by
* integer bitmasks.
*/
(function(root, factory) {
/* istanbul ignore next */
if (typeof define === 'function' && define.amd) {
define(factory);
} else if (typeof module === 'object' && module.exports) {
module.exports = factory();
} else {
root.jsccbitset = factory();
}
}(this, function() {
//>>excludeStart("closure", pragmas.closure);
var jscc = {};
//>>excludeEnd("closure");
/**
* Creates a new BitSet32 object.
* @classdesc A bitset implementation backed by integer bitmasks.
* @implements {jscc.bitset}
* @constructor
*/
jscc.BitSet32 = function() {
var that = this;
/**
* @private
* @type {!Array<number>}
*/
this._data = [];
/**
* @inheritDoc
* @param {!number} bit
* @param {boolean=} state
* @returns {!boolean}
*/
this.set = function(bit, state) {
state = !!state;
that._data[bit >> 5] =
(state ? (that._data[bit >> 5] | (1 << (bit & 31))) : (that._data[bit >> 5] & ~(1 << (bit & 31))));
return state;
};
/**
* @inheritDoc
* @param {!number} bit
* @returns {!boolean}
*/
this.get = function(bit) {
return ((that._data[bit >> 5] & (1 << (bit & 31))) != 0);
};
/**
* @inheritDoc
* @returns {!number}
*/
this.count = function() {
var i, l, c = 0;
for (i = 0, l = that._data.length * 32; i < l; i++) {
if (that.get(i)) {
c++;
}
}
return c;
};
};
/**
* Module containing BitSet32 implementation. Returns a factory
* function to make Closure slightly happier elsewhere.
* @module {function(new:jscc.BitSet32)} jscc/bitset/BitSet32
*/
return jscc.BitSet32;
}));