]> zoso.dev Git - buffer.git/commitdiff
use fast .set() path for all typed arrays
authorFeross Aboukhadijeh <feross@feross.org>
Tue, 8 Apr 2014 07:36:05 +0000 (00:36 -0700)
committerFeross Aboukhadijeh <feross@feross.org>
Tue, 8 Apr 2014 07:36:05 +0000 (00:36 -0700)
index.js

index 6ddb57c24e12043fd74c3f5a4414c14953b5288e..99b8f63119c82eeba8bf41f4468e01b662911151 100644 (file)
--- a/index.js
+++ b/index.js
@@ -74,7 +74,7 @@ function Buffer (subject, encoding, noZero) {
   else if (type === 'string')
     length = Buffer.byteLength(subject, encoding)
   else if (type === 'object')
-    length = coerce(subject.length) // Assume object is an array
+    length = coerce(subject.length) // assume that object is array-like
   else
     throw new Error('First argument needs to be a number, array or string.')
 
@@ -90,9 +90,11 @@ function Buffer (subject, encoding, noZero) {
   }
 
   var i
-  if (Buffer._useTypedArrays && typeof Uint8Array === 'function' &&
-      subject instanceof Uint8Array) {
-    // Speed optimization -- use set if we're copying from a Uint8Array
+  if (Buffer._useTypedArrays && (subject instanceof Uint8Array
+      || subject instanceof Uint16Array || subject instanceof Int16Array
+      || subject instanceof Uint32Array || subject instanceof Int32Array
+      || subject instanceof Float32Array || subject instanceof Float64Array)) {
+    // Speed optimization -- use set if we're copying from a typed array
     buf._set(subject)
   } else if (isArrayish(subject)) {
     // Treat array-ish objects as a byte array
@@ -933,7 +935,7 @@ function stringtrim (str) {
 var BP = Buffer.prototype
 
 /**
- * Augment the Uint8Array *instance* (not the class!) with Buffer methods
+ * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
  */
 Buffer._augment = function (arr) {
   arr._isBuffer = true