Built motion from commit 6a09e18b.|2.6.11
[motion2.git] / legacy-libs / @protobufjs / pool / index.js
diff --git a/legacy-libs/@protobufjs/pool/index.js b/legacy-libs/@protobufjs/pool/index.js
new file mode 100644 (file)
index 0000000..9556f5a
--- /dev/null
@@ -0,0 +1,48 @@
+"use strict";\r
+module.exports = pool;\r
+\r
+/**\r
+ * An allocator as used by {@link util.pool}.\r
+ * @typedef PoolAllocator\r
+ * @type {function}\r
+ * @param {number} size Buffer size\r
+ * @returns {Uint8Array} Buffer\r
+ */\r
+\r
+/**\r
+ * A slicer as used by {@link util.pool}.\r
+ * @typedef PoolSlicer\r
+ * @type {function}\r
+ * @param {number} start Start offset\r
+ * @param {number} end End offset\r
+ * @returns {Uint8Array} Buffer slice\r
+ * @this {Uint8Array}\r
+ */\r
+\r
+/**\r
+ * A general purpose buffer pool.\r
+ * @memberof util\r
+ * @function\r
+ * @param {PoolAllocator} alloc Allocator\r
+ * @param {PoolSlicer} slice Slicer\r
+ * @param {number} [size=8192] Slab size\r
+ * @returns {PoolAllocator} Pooled allocator\r
+ */\r
+function pool(alloc, slice, size) {\r
+    var SIZE   = size || 8192;\r
+    var MAX    = SIZE >>> 1;\r
+    var slab   = null;\r
+    var offset = SIZE;\r
+    return function pool_alloc(size) {\r
+        if (size < 1 || size > MAX)\r
+            return alloc(size);\r
+        if (offset + size > SIZE) {\r
+            slab = alloc(SIZE);\r
+            offset = 0;\r
+        }\r
+        var buf = slice.call(slab, offset, offset += size);\r
+        if (offset & 7) // align to 32 bit\r
+            offset = (offset | 7) + 1;\r
+        return buf;\r
+    };\r
+}\r