Handle short[]'s on the actionscript side of streaming. This gets a little ugly given the lack of a primitive short on the actionscript side...

git-svn-id: svn+ssh://src.earth.threerings.net/narya/trunk@6071 542714f4-19e9-0310-aa3c-eee0fc999fb1
This commit is contained in:
Mike Thomas
2010-06-08 01:37:08 +00:00
parent 7101012413
commit 079269a825
2 changed files with 36 additions and 1 deletions
+18
View File
@@ -52,6 +52,12 @@ public dynamic class TypedArray extends Array
return "[L" + cname + ";";
}
/** Because we have no actionscript type to check, we'll just handle this one manually. */
public static function getJavaShortType () :String
{
return "[S";
}
/**
* A factory method to create a TypedArray for holding objects of the specified type.
*/
@@ -64,6 +70,18 @@ public dynamic class TypedArray extends Array
return ta;
}
/**
* A factory method to create a TypedArray for holding data meant as java shorts.
*/
public static function createShort (initialValues :Array = null) :TypedArray
{
var ta :TypedArray = new TypedArray(getJavaShortType());
if (initialValues != null) {
ta.addAll(initialValues);
}
return ta;
}
/**
* Create a TypedArray
*
@@ -65,6 +65,9 @@ public class ArrayStreamer extends Streamer
} else if (secondChar === "Z") {
_elementType = Boolean;
} else if (secondChar === "S") {
_elementType = PrimitiveShort;
} else {
Log.getLog(this).warning("Other array types are not yet handled", "jname", jname);
throw new Error("Don't know how to stream '" + jname + "' instances.");
@@ -87,7 +90,11 @@ public class ArrayStreamer extends Streamer
for (ii = 0; ii < arr.length; ii++) {
out.writeInt(int(arr[ii]));
}
} else if (_elementType == PrimitiveShort) {
for (ii = 0; ii < arr.length; ii++) {
out.writeShort(int(arr[ii]));
}
} else if (_elementType == Boolean) {
for (ii = 0; ii < arr.length; ii++) {
out.writeBoolean(Boolean(arr[ii]));
@@ -125,6 +132,11 @@ public class ArrayStreamer extends Streamer
arr[ii] = ins.readInt();
}
} else if (_elementType == PrimitiveShort) {
for (ii = 0; ii < arr.length; ii++) {
arr[ii] = ins.readShort();
}
} else if (_elementType == Boolean) {
for (ii = 0; ii < arr.length; ii++) {
arr[ii] = ins.readBoolean();
@@ -182,3 +194,8 @@ public class ArrayStreamer extends Streamer
protected var _isFinal :Boolean;
}
}
/** A class to represent that the data in question should be handled as a java primitive short. */
class PrimitiveShort
{
}