Nicolas Cannasse %!s(int64=19) %!d(string=hai) anos
pai
achega
488872cdea
Modificáronse 2 ficheiros con 54 adicións e 0 borrados
  1. 33 0
      std/neko/io/Input.hx
  2. 21 0
      std/neko/io/Output.hx

+ 33 - 0
std/neko/io/Input.hx

@@ -100,4 +100,37 @@ class Input {
 		return s;
 	}
 
+	public function skip( nbytes : Int ) {
+		readBytes(nbytes);
+	}
+
+	public function readInt32() {
+		var ch1 = readChar();
+		var ch2 = readChar();
+		var ch3 = readChar();
+		var ch4 = readChar();
+		if( (ch4 & 128) != 0 ) {
+			if( ch4 & 64 == 0 ) throw Error.Overflow;
+			return ch1 | (ch2 << 8) | (ch3 << 16) | ((ch4 & 127) << 24);
+		} else {
+			if( ch4 & 64 != 0 ) throw Error.Overflow;
+			return ch1 | (ch2 << 8) | (ch3 << 16) | (ch4 << 24);
+		}
+	}
+
+	public function readUInt16() {
+		var ch1 = readChar();
+		var ch2 = readChar();
+		return ch1 | (ch2 << 8);
+	}
+
+	public function readInt16() {
+		var ch1 = readChar();
+		var ch2 = readChar();
+		var n = ch1 | (ch2 << 8);
+		if( ch2 & 128 != 0 )
+			return n - 65536;
+		return n;
+	}
+
 }

+ 21 - 0
std/neko/io/Output.hx

@@ -68,4 +68,25 @@ class Output {
 		}
 	}
 
+	public function writeInt32( x : Int ) {
+		writeChar(x & 0xFF);
+		writeChar((x >> 8) & 0xFF);
+		writeChar((x >> 16) & 0xFF);
+		writeChar(x >>> 24);
+	}
+
+	public function writeUInt16( x : Int ) {
+		if( x < 0 || x > 0xFFFF ) throw Error.Overflow;
+		writeChar(x & 0xFF);
+		writeChar(x >> 8);
+	}
+
+	public function writeInt16( x : Int ) {
+		if( x < -0x7FFF || x > 0x7FFF ) throw Error.Overflow;
+		if( x < 0 )
+			writeUInt16(65536 + x);
+		else
+			writeUInt16(x);
+	}
+
 }