Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: lib/typedObjects.js

Issue 5728072976302080: Issue 151 - [Typed objects] Implement dynamically-sized array types (Closed)
Patch Set: Use Uint8Array as constructor, not a function Created May 19, 2014, 7:57 a.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | lib/typedObjects/arrayTypes.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/typedObjects.js
===================================================================
--- a/lib/typedObjects.js
+++ b/lib/typedObjects.js
@@ -46,16 +46,20 @@
*
* constructor: function that will be called whenever an object of the type
* is created. Parameters supplied during object creation will be passed
* to the constructor.
* destructor: function that will be called when an object of the type is
* freed.
* bufferSize: number of objects that should be placed into a single typed
* buffer (by default 128).
+ * watch: a map assigning watcher functions to properties. These functions
+ * are called with the new property value before the property is set.
+ * They have to return the value that should actually be set for the
+ * property, it doesn't necessarily have to be the original value.
*
* Creating and releasing an object instance
* -----------------------------------------
*
* var point = Point2D(5, 10);
* point.rotate(10);
* console.log(point.x + ", " + point.y);
*
@@ -104,16 +108,58 @@
*
* var point1 = Point2D(5, 10);
* var point2 = Point2D(6, 12);
* console.log(point1.equals(point2)); // false
* console.log(point1.equals(point1)); // true
*
* Note that JavaScript comparison operators == and != won't always produce
* correct results for typed objects.
+ *
+ * Array types
+ * -----------
+ *
+ * An array type can be created with any other type as element type:
+ *
+ * var uint8Array = uint8.Array();
+ * var array = uint8Array();
+ * array.length = 2;
+ * array.set(0, 5);
+ * array.set(1, 8);
+ *
+ * var Blob = ObjectType({
+ * name: uint8Array,
+ * data: uint8Array
+ * });
+ * var blob = Blob();
+ * blob.data = array;
+ * array.release();
+ *
+ * Array() function takes the same parameters as ObjectType(), meaning that an
+ * array can have a constructor, destructor and custom properties or methods.
+ * This also means that there can be multiple array types for each element type,
+ * each Array() call will generate a new type that won't be compatible with
+ * the other types. The metadata parameter for arrays can have the additional
+ * arrayBufferSize property determining the number of array elements stored in
+ * a single buffer (not the same as bufferSize property which applies to buffers
+ * containing array metadata and custom array properties and determines the
+ * number of arrays stored in these buffers).
+ *
+ * An array is an object meaning that it has the properties common for all
+ * objects, in particular retain() and release() determining when the array is
+ * garbage collected. In addition, it has the following properties and methods:
+ *
+ * get(index): retrieves the array element at specified index.
+ * set(index, value): sets the array element at specified index.
+ * length: number of elements in the array, by default 0. Increase the length
+ * to match your data size.
+ * size: size of the allocated buffer in array elements, will be at least
+ * equal to length. Normally you won't need to set the size explicitly.
+ * However, the size won't decrease automatically if the array gets
+ * smaller so you might want to set it in order to shrink the array.
*/
function forwardExports(module)
{
let moduleExports = require(module);
for (let key in moduleExports)
exports[key] = moduleExports[key];
}
« no previous file with comments | « no previous file | lib/typedObjects/arrayTypes.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld