]> zoso.dev Git - buffer.git/commitdiff
Fix read too, add test for read. Also add buffer.copy
authorJanus <ysangkok@gmail.com>
Thu, 20 Sep 2012 22:21:38 +0000 (00:21 +0200)
committerJanus <ysangkok@gmail.com>
Thu, 20 Sep 2012 22:21:38 +0000 (00:21 +0200)
index.js
test/buffer.js

index f63a41528de06ee626c2e41090bf3f34b7716ab0..b13ca2d4331f7a63e41a2abf6d93672ca3561b9a 100644 (file)
--- a/index.js
+++ b/index.js
@@ -288,6 +288,17 @@ SlowBuffer.prototype.slice = function(start, end) {
   return new Buffer(this, end - start, +start);
 };
 
+SlowBuffer.prototype.copy = function(target, targetstart, sourcestart, sourceend) {
+  var temp = [];
+  for (var i=sourcestart; i<sourceend; i++) {
+    assert.ok(typeof this[i] !== 'undefined', "copying undefined buffer bytes!");
+    temp.push(this[i]);
+  }
+
+  for (var i=targetstart; i<targetstart+temp.length; i++) {
+    target[i] = temp[i-targetstart];
+  }
+};
 
 function coerce(length) {
   // Coerce length to a number (possibly NaN), round up
@@ -649,7 +660,7 @@ Buffer.prototype.readUInt8 = function(offset, noAssert) {
         'Trying to read beyond buffer length');
   }
 
-  return buffer[offset];
+  return buffer.parent[buffer.offset + offset];
 };
 
 function readUInt16(buffer, offset, isBigEndian, noAssert) {
@@ -668,11 +679,11 @@ function readUInt16(buffer, offset, isBigEndian, noAssert) {
   }
 
   if (isBigEndian) {
-    val = buffer[offset] << 8;
-    val |= buffer[offset + 1];
+    val = buffer.parent[buffer.offset + offset] << 8;
+    val |= buffer.parent[buffer.offset + offset + 1];
   } else {
-    val = buffer[offset];
-    val |= buffer[offset + 1] << 8;
+    val = buffer.parent[buffer.offset + offset];
+    val |= buffer.parent[buffer.offset + offset + 1] << 8;
   }
 
   return val;
@@ -701,15 +712,15 @@ function readUInt32(buffer, offset, isBigEndian, noAssert) {
   }
 
   if (isBigEndian) {
-    val = buffer[offset + 1] << 16;
-    val |= buffer[offset + 2] << 8;
-    val |= buffer[offset + 3];
-    val = val + (buffer[offset] << 24 >>> 0);
+    val = buffer.parent[buffer.offset + offset + 1] << 16;
+    val |= buffer.parent[buffer.offset + offset + 2] << 8;
+    val |= buffer.parent[buffer.offset + offset + 3];
+    val = val + (buffer.parent[buffer.offset + offset] << 24 >>> 0);
   } else {
-    val = buffer[offset + 2] << 16;
-    val |= buffer[offset + 1] << 8;
-    val |= buffer[offset];
-    val = val + (buffer[offset + 3] << 24 >>> 0);
+    val = buffer.parent[buffer.offset + offset + 2] << 16;
+    val |= buffer.parent[buffer.offset + offset + 1] << 8;
+    val |= buffer.parent[buffer.offset + offset];
+    val = val + (buffer.parent[buffer.offset + offset + 3] << 24 >>> 0);
   }
 
   return val;
@@ -781,12 +792,12 @@ Buffer.prototype.readInt8 = function(offset, noAssert) {
         'Trying to read beyond buffer length');
   }
 
-  neg = buffer[offset] & 0x80;
+  neg = buffer.parent[buffer.offset + offset] & 0x80;
   if (!neg) {
-    return (buffer[offset]);
+    return (buffer.parent[buffer.offset + offset]);
   }
 
-  return ((0xff - buffer[offset] + 1) * -1);
+  return ((0xff - buffer.parent[buffer.offset + offset] + 1) * -1);
 };
 
 function readInt16(buffer, offset, isBigEndian, noAssert) {
index f5da95b7a920cc08377c55b6262cc0eb9ab4185f..4486602c6a732c7b5f93563b76749424b9a31eae 100644 (file)
@@ -74,21 +74,26 @@ test('hex buffer to ascii', function (t) {
 });
 
 test("hex of write{Uint,Int}{8,16,32}{LE,BE}", function(t) {
-    t.plan(2*2*2+2);
+    t.plan(2*(2*2*2+2));
     ["UInt","Int"].forEach(function(x){
         [8,16,32].forEach(function(y){
             var endianesses = (y === 8) ? [""] : ["LE","BE"];
             endianesses.forEach(function(z){
                 var v1  = new buffer.Buffer(y / 8);
                 var v2  = new Buffer(y / 8);
-                var fn  = "write" + x + y + z;
+                var writefn  = "write" + x + y + z;
                 var val = (x === "Int") ? -3 : 3;
-                v1[fn](val, 0);
-                v2[fn](val, 0);
+                v1[writefn](val, 0);
+                v2[writefn](val, 0);
                 t.equal(
                     v1.toString("hex"),
                     v2.toString("hex")
                 );
+                var readfn = "read" + x + y + z;
+                t.equal(
+                    v1[readfn](0),
+                    v2[readfn](0)
+                );
             });
         });
     });