added TMemoryStream to hx
diff --git a/lib/haxe/src/org/apache/thrift/transport/TMemoryStream.hx b/lib/haxe/src/org/apache/thrift/transport/TMemoryStream.hx
new file mode 100644
index 0000000..49b494e
--- /dev/null
+++ b/lib/haxe/src/org/apache/thrift/transport/TMemoryStream.hx
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.thrift.transport;
+
+import haxe.io.Bytes;
+import haxe.io.BytesBuffer;
+import haxe.io.Output;
+
+class TMemoryStream implements TStream {
+
+ private var Data : Bytes;
+ public var Position(default,default) : Int;
+
+ public function new( data : Bytes = null) {
+ var target = new BytesBuffer();
+ if ( data != null) {
+ for ( i in 0...data.length) {
+ target.addByte( data.get(i));
+ ++Position;
+ }
+ }
+ Data = target.getBytes();
+ }
+
+ private function IsEof() : Bool {
+ return (0 > Position) || (Position >= Data.length);
+ }
+
+ public function Close() : Void {
+ var target = new BytesBuffer();
+ Data = target.getBytes();
+ Position = 0;
+ }
+
+ public function Peek() : Bool {
+ return (! IsEof());
+ }
+
+ // read count bytes into buf starting at offset
+ public function Read( buf : Bytes, offset : Int, count : Int) : Int {
+ var numRead = 0;
+
+ for ( i in 0...count) {
+ if ( IsEof())
+ break;
+
+ buf.set( offset + i, Data.get( Position++));
+ ++numRead;
+ }
+
+ return numRead;
+ }
+
+ // write count bytes from buf starting at offset
+ public function Write( buf : Bytes, offset : Int, count : Int) : Void {
+ var numBytes = buf.length - offset;
+ if ( numBytes > count) {
+ numBytes = count;
+ }
+
+ for ( i in 0...numBytes) {
+ Data.set( Position + i, buf.get( offset + i));
+ }
+ }
+
+ public function Flush() : Void {
+ // nothing to do
+ }
+
+}
+