You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							113 lines
						
					
					
						
							2.4 KiB
						
					
					
				
			
		
		
	
	
							113 lines
						
					
					
						
							2.4 KiB
						
					
					
				/* Node.js 6.4.0 and up has full support */ | 
						|
var hasFullSupport = (function () { | 
						|
  try { | 
						|
    if (!Buffer.isEncoding('latin1')) { | 
						|
      return false | 
						|
    } | 
						|
 | 
						|
    var buf = Buffer.alloc ? Buffer.alloc(4) : new Buffer(4) | 
						|
 | 
						|
    buf.fill('ab', 'ucs2') | 
						|
 | 
						|
    return (buf.toString('hex') === '61006200') | 
						|
  } catch (_) { | 
						|
    return false | 
						|
  } | 
						|
}()) | 
						|
 | 
						|
function isSingleByte (val) { | 
						|
  return (val.length === 1 && val.charCodeAt(0) < 256) | 
						|
} | 
						|
 | 
						|
function fillWithNumber (buffer, val, start, end) { | 
						|
  if (start < 0 || end > buffer.length) { | 
						|
    throw new RangeError('Out of range index') | 
						|
  } | 
						|
 | 
						|
  start = start >>> 0 | 
						|
  end = end === undefined ? buffer.length : end >>> 0 | 
						|
 | 
						|
  if (end > start) { | 
						|
    buffer.fill(val, start, end) | 
						|
  } | 
						|
 | 
						|
  return buffer | 
						|
} | 
						|
 | 
						|
function fillWithBuffer (buffer, val, start, end) { | 
						|
  if (start < 0 || end > buffer.length) { | 
						|
    throw new RangeError('Out of range index') | 
						|
  } | 
						|
 | 
						|
  if (end <= start) { | 
						|
    return buffer | 
						|
  } | 
						|
 | 
						|
  start = start >>> 0 | 
						|
  end = end === undefined ? buffer.length : end >>> 0 | 
						|
 | 
						|
  var pos = start | 
						|
  var len = val.length | 
						|
  while (pos <= (end - len)) { | 
						|
    val.copy(buffer, pos) | 
						|
    pos += len | 
						|
  } | 
						|
 | 
						|
  if (pos !== end) { | 
						|
    val.copy(buffer, pos, 0, end - pos) | 
						|
  } | 
						|
 | 
						|
  return buffer | 
						|
} | 
						|
 | 
						|
function fill (buffer, val, start, end, encoding) { | 
						|
  if (hasFullSupport) { | 
						|
    return buffer.fill(val, start, end, encoding) | 
						|
  } | 
						|
 | 
						|
  if (typeof val === 'number') { | 
						|
    return fillWithNumber(buffer, val, start, end) | 
						|
  } | 
						|
 | 
						|
  if (typeof val === 'string') { | 
						|
    if (typeof start === 'string') { | 
						|
      encoding = start | 
						|
      start = 0 | 
						|
      end = buffer.length | 
						|
    } else if (typeof end === 'string') { | 
						|
      encoding = end | 
						|
      end = buffer.length | 
						|
    } | 
						|
 | 
						|
    if (encoding !== undefined && typeof encoding !== 'string') { | 
						|
      throw new TypeError('encoding must be a string') | 
						|
    } | 
						|
 | 
						|
    if (encoding === 'latin1') { | 
						|
      encoding = 'binary' | 
						|
    } | 
						|
 | 
						|
    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { | 
						|
      throw new TypeError('Unknown encoding: ' + encoding) | 
						|
    } | 
						|
 | 
						|
    if (val === '') { | 
						|
      return fillWithNumber(buffer, 0, start, end) | 
						|
    } | 
						|
 | 
						|
    if (isSingleByte(val)) { | 
						|
      return fillWithNumber(buffer, val.charCodeAt(0), start, end) | 
						|
    } | 
						|
 | 
						|
    val = new Buffer(val, encoding) | 
						|
  } | 
						|
 | 
						|
  if (Buffer.isBuffer(val)) { | 
						|
    return fillWithBuffer(buffer, val, start, end) | 
						|
  } | 
						|
 | 
						|
  // Other values (e.g. undefined, boolean, object) results in zero-fill | 
						|
  return fillWithNumber(buffer, 0, start, end) | 
						|
} | 
						|
 | 
						|
module.exports = fill
 | 
						|
 |