Repository: flex-asjs Updated Branches: refs/heads/develop ac7b50537 -> c268a9080
Added support for endianness in BinaryData Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/c268a908 Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/c268a908 Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/c268a908 Branch: refs/heads/develop Commit: c268a9080ce9a7ae00e74715b3a41d71952dac06 Parents: ac7b505 Author: Harbs <[email protected]> Authored: Wed Jul 6 11:30:28 2016 +0300 Committer: Harbs <[email protected]> Committed: Wed Jul 6 11:30:28 2016 +0300 ---------------------------------------------------------------------- .../flex/org/apache/flex/utils/BinaryData.as | 121 +++++++++++++++---- .../main/flex/org/apache/flex/utils/Endian.as | 12 +- .../flex/org/apache/flex/net/URLBinaryLoader.as | 2 +- .../main/flex/org/apache/flex/net/URLLoader.as | 1 - .../main/flex/org/apache/flex/net/URLStream.as | 2 +- 5 files changed, 111 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c268a908/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/BinaryData.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/BinaryData.as b/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/BinaryData.as index 373ee8e..573ada2 100644 --- a/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/BinaryData.as +++ b/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/BinaryData.as @@ -56,7 +56,37 @@ public class BinaryData { ba = bytes ? bytes : new ArrayBuffer(0); } + + private var _endian:String = Endian.DEFAULT; + + /** + * Indicates the byte order for the data. + * The default is "default" which in Javascript is machine dependent. + * To ensure portable bytes, set the endian to big or little as appropriate. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.7.0 + */ + public function get endian():String + { + return _endian; + } + public function set endian(value:String):void + { + _endian = value; + + COMPILE::SWF + { + if(value == Endian.DEFAULT) + ba.endian = Endian.BIG_ENDIAN; + else + ba.endian = value; + } + } + COMPILE::SWF private var ba:ByteArray; @@ -125,9 +155,16 @@ public class BinaryData var view:Int16Array; growBuffer(2); - - view = new Int16Array(ba, _position, 1); - view[0] = short; + if(_endian == Endian.DEFAULT) + { + view = new Int16Array(ba, _position, 1); + view[0] = short; + } + else + { + var dv:DataView = new DataView(ba); + dv.setInt16(_position,short,_endian == Endian.LITTLE_ENDIAN); + } _position += 2; } } @@ -149,12 +186,19 @@ public class BinaryData COMPILE::JS { var view:Uint32Array; - + growBuffer(4); - - view = new Uint32Array(ba, _position, 1); - view[0] = unsigned; - _position += 4; + if(_endian == Endian.DEFAULT) + { + view = new Uint32Array(ba, _position, 1); + view[0] = unsigned; + } + else + { + var dv:DataView = new DataView(ba); + dv.setUint32(_position,unsigned,_endian == Endian.LITTLE_ENDIAN); + } + _position += 4; } } @@ -166,7 +210,7 @@ public class BinaryData * @playerversion AIR 2.6 * @productversion FlexJS 0.0 */ - public function writeInt(integer:uint):void + public function writeInt(integer:int):void { COMPILE::SWF { @@ -175,11 +219,19 @@ public class BinaryData COMPILE::JS { var view:Int32Array; - + growBuffer(4); - - view = new Int32Array(ba, _position, 1); - view[0] = integer; + + if(_endian == Endian.DEFAULT) + { + view = new Int32Array(ba, _position, 1); + view[0] = integer; + } + else + { + var dv:DataView = new DataView(ba); + dv.setInt32(_position,integer,_endian == Endian.LITTLE_ENDIAN); + } _position += 4; } } @@ -226,9 +278,17 @@ public class BinaryData { var view:Int16Array; - view = new Int16Array(ba, _position, 1); - _position += 2; - return view[0]; + if(_endian == Endian.DEFAULT) + { + view = new Int16Array(ba, _position, 1); + _position += 2; + return view[0]; + } + + var dv:DataView = new DataView(ba); + var i:int = dv.getInt16(_position,_endian == Endian.LITTLE_ENDIAN); + _position += 2; + return i; } } @@ -250,9 +310,16 @@ public class BinaryData { var view:Uint32Array; - view = new Uint32Array(ba, _position, 1); - _position += 4; - return view[0]; + if(_endian == Endian.DEFAULT) + { + view = new Uint32Array(ba, _position, 1); + _position += 4; + return view[0]; + } + var dv:DataView = new DataView(ba); + var i:uint = dv.getUint32(_position,_endian == Endian.LITTLE_ENDIAN); + _position += 4; + return i; } } @@ -273,10 +340,18 @@ public class BinaryData COMPILE::JS { var view:Int32Array; - - view = new Int32Array(ba, _position, 1); - _position += 4; - return view[0]; + + if(_endian == Endian.DEFAULT) + { + view = new Int32Array(ba, _position, 1); + _position += 4; + return view[0]; + } + var dv:DataView = new DataView(ba); + var i:uint = dv.getInt32(_position,_endian == Endian.LITTLE_ENDIAN); + _position += 4; + return i; + } } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c268a908/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/Endian.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/Endian.as b/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/Endian.as index 8950426..e33181c 100644 --- a/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/Endian.as +++ b/frameworks/projects/Core/src/main/flex/org/apache/flex/utils/Endian.as @@ -47,6 +47,16 @@ package org.apache.flex.utils * @productversion FlexJS 0.7.0 */ public static const LITTLE_ENDIAN:String = "littleEndian"; - + + /** + * Uses the default endianness on the system. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.7.0 + */ + public static const DEFAULT:String = "default"; + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c268a908/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLBinaryLoader.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLBinaryLoader.as b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLBinaryLoader.as index 34751db..f313b3a 100644 --- a/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLBinaryLoader.as +++ b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLBinaryLoader.as @@ -65,7 +65,7 @@ package org.apache.flex.net * @playerversion AIR 2.6 * @productversion FlexJS 0.7.0 */ - public var endian:String = Endian.BIG_ENDIAN; + public var endian:String = Endian.DEFAULT; private var stream:URLStream; http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c268a908/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLLoader.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLLoader.as b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLLoader.as index 102f525..29a804c 100644 --- a/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLLoader.as +++ b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLLoader.as @@ -84,7 +84,6 @@ package org.apache.flex.net { public function URLLoader() { - throw new Error("URLLoader should not be instantiated. Use a derived class instead.") } protected function cleanupCallbacks():void http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c268a908/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLStream.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLStream.as b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLStream.as index 397b336..b3754de 100644 --- a/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLStream.as +++ b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/URLStream.as @@ -166,7 +166,7 @@ package org.apache.flex.net * @playerversion AIR 2.6 * @productversion FlexJS 0.7.0 */ - public var endian:String = Endian.LITTLE_ENDIAN; + public var endian:String = Endian.DEFAULT; private function cleanupCallbacks():void {
