UNPKG

bops

Version:
53 lines (41 loc) 1.29 kB
module.exports = copy var slice = [].slice function copy(source, target, target_start, source_start, source_end) { target_start = arguments.length < 3 ? 0 : target_start source_start = arguments.length < 4 ? 0 : source_start source_end = arguments.length < 5 ? source.length : source_end if(source_end === source_start) { return } if(target.length === 0 || source.length === 0) { return } if(source_end > source.length) { source_end = source.length } if(target.length - target_start < source_end - source_start) { source_end = target.length - target_start + source_start } if(source.buffer !== target.buffer) { return fast_copy(source, target, target_start, source_start, source_end) } return slow_copy(source, target, target_start, source_start, source_end) } function fast_copy(source, target, target_start, source_start, source_end) { var len = (source_end - source_start) + target_start for(var i = target_start, j = source_start; i < len; ++i, ++j) { target[i] = source[j] } } function slow_copy(from, to, j, i, jend) { // the buffers could overlap. var iend = jend + i , tmp = new Uint8Array(slice.call(from, i, iend)) , x = 0 for(; i < iend; ++i, ++x) { to[j++] = tmp[x] } }