Stream Helper Methods in JavaScript

The stream classes provide all of the low-level methods necessary for encoding and decoding Ice types. However, it would be tedious and error-prone to manually encode complex Ice types such as classes, structs, and dictionaries using these low-level functions. For this reason, the Slice compiler generates helper methods for streaming user-defined types.

Sequence

For a Slice sequence named StringSeq, the Slice compiler generates StringSeqHelper that provides read and write methods:

JavaScript
var v = StringSeqHelper.read(istr);
StringSeqHelper.write(ostr, v);

Dictionary

For a Slice dictionary named EmployeeMap, the Slice compiler generates EmployeeMapHelper that provides read and write methods:

JavaScript
var v = EmployeeMapHelper.read(istr);
EmployeeMapHelper.write(ostr, v);

Enumeration

For a Slice enumeration named Color, the Slice compiler generates the JavaScript class Color. No additional helper methods are necessary because the stream classes make insertion and extraction of enumerators straightforward:

JavaScript
var e = istr.readEnum(Color);
ostr.writeEnum(e);

Structure

For a Slice structure named Point, the Slice compiler generates the JavaScript class Point. This class defines "static" read and write methods:

JavaScript
var p = Point.read(istr);
Point.write(ostr, p);

Class

For a Slice class named Shape, the Slice compiler generates the JavaScript class Shape. This class defines "static" read and write methods:

JavaScript
var obj = Shape.read(istr); // obj.value holds instance
istr.readPendingValues();
Shape.write(ostr, obj.value);

Note that read returns a wrapper object with a value member. This member may not be initialized until after readPendingValues has been called on the stream and all instances have been unmarshaled, at which point obj.value will either be null or a reference to an instance.

The generated class also provides methods for handling optional instances:

JavaScript
var optional = Shape.readOptional(istr, tag);
istr.readPendingValues();
if(optional.value !== undefined)
{
    Shape.writeOptional(ostr, tag, optional.value);
}

Again, the return value of readOptional is a wrapper whose value member will eventually be set to undefined (if the optional instance was not present), null, or a reference to an instance.

See Also