| 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]; | 
| } | 
|  |