123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- // helpers
- //? if (NODE) {
- /**
- * @type {!Buffer}
- * @inner
- */
- var EMPTY_BUFFER = new Buffer(0);
- //? } else {
- /**
- * @type {!ArrayBuffer}
- * @inner
- */
- var EMPTY_BUFFER = new ArrayBuffer(0);
- //? }
- //? if (!INLINE) {
- /**
- * Asserts that a value is an integer and returns the type-safe value.
- * @param {number} value Value to assert
- * @param {boolean=} unsigned Whether explicitly unsigned
- * @returns {number} Type-safe value
- * @throws {TypeError} If `value` is not an integer
- * @inner
- */
- function assertInteger(value, unsigned) {
- if (typeof value !== 'number' || value % 1 !== 0)
- throw TypeError("Illegal value: "+offset+" (not an integer)");
- return unsigned ? value >>> 0 : value | 0;
- }
- /**
- * Asserts that a value is an integer or Long.
- * @param {number|!Long} value Value to assert
- * @param {boolean=} unsigned Whether explicitly unsigned
- * @returns {number|!Long} Type-safe value
- * @throws {TypeError} If `value` is not an integer or Long
- * @inner
- */
- function assertLong(value, unsigned) {
- if (typeof value === 'number') {
- return Long.fromNumber(value, unsigned);
- } else if (typeof value === 'string') {
- return Long.fromString(value, unsigned);
- } else if (value && value instanceof Long) {
- if (typeof unsigned !== 'undefined') {
- if (unsigned && !value.unsigned) return value.toUnsigned();
- if (!unsigned && value.unsigned) return value.toSigned();
- }
- return value;
- } else
- throw TypeError("Illegal value: "+value+" (not an integer or Long)");
- }
- /**
- * Asserts that `min <= offset <= cap-size` and returns the type-safe offset.
- * @param {number} offset Offset to assert
- * @param {number} min Minimum offset
- * @param {number} cap Cap offset
- * @param {number} size Required size in bytes
- * @returns {number} Type-safe offset
- * @throws {TypeError} If `offset` is not an integer
- * @throws {RangeError} If `offset < min || offset > cap-size`
- * @inner
- */
- function assertOffset(offset, min, cap, size) {
- if (typeof offset !== 'number' || offset % 1 !== 0)
- throw TypeError("Illegal offset: "+offset+" (not an integer)");
- offset = offset | 0;
- if (offset < min || offset > cap-size)
- throw RangeError("Illegal offset: "+min+" <= "+value+" <= "+cap+"-"+size);
- return offset;
- }
- /**
- * assertRange return value.
- * @type {Array.<number>}
- */
- var rangeVal = new Array(2);
- /**
- * Asserts that `min <= begin <= end <= cap`. Updates `rangeVal` with the type-safe range.
- * @param {number} begin Begin offset
- * @param {number} end End offset
- * @param {number} min Minimum offset
- * @param {number} cap Cap offset
- * @throws {TypeError} If `begin` or `end` is not an integer
- * @throws {RangeError} If `begin < min || begin > end || end > cap`
- * @inner
- */
- function assertRange(begin, end, min, cap) {
- if (typeof begin !== 'number' || begin % 1 !== 0)
- throw TypeError("Illegal begin: "+begin+" (not a number)");
- begin = begin | 0;
- if (typeof end !== 'number' || end % 1 !== 0)
- throw TypeError("Illegal end: "+range[1]+" (not a number)");
- end = end | 0;
- if (begin < min || begin > end || end > cap)
- throw RangeError("Illegal range: "+min+" <= "+begin+" <= "+end+" <= "+cap);
- rangeVal[0] = begin; rangeVal[1] = end;
- }
- //? }
- //? if (BASE64 || UTF8) {
- /**
- * String.fromCharCode reference for compile-time renaming.
- * @type {function(...number):string}
- * @inner
- */
- var stringFromCharCode = String.fromCharCode;
- /**
- * Creates a source function for a string.
- * @param {string} s String to read from
- * @returns {function():number|null} Source function returning the next char code respectively `null` if there are
- * no more characters left.
- * @throws {TypeError} If the argument is invalid
- * @inner
- */
- function stringSource(s) {
- var i=0; return function() {
- return i < s.length ? s.charCodeAt(i++) : null;
- };
- }
- /**
- * Creates a destination function for a string.
- * @returns {function(number=):undefined|string} Destination function successively called with the next char code.
- * Returns the final string when called without arguments.
- * @inner
- */
- function stringDestination() {
- var cs = [], ps = []; return function() {
- if (arguments.length === 0)
- return ps.join('')+stringFromCharCode.apply(String, cs);
- if (cs.length + arguments.length > 1024)
- ps.push(stringFromCharCode.apply(String, cs)),
- cs.length = 0;
- Array.prototype.push.apply(cs, arguments);
- };
- }
- //? }
|