127 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
package kha;
 | 
						|
 | 
						|
import haxe.io.Bytes;
 | 
						|
import js.node.Buffer;
 | 
						|
 | 
						|
class Blob implements Resource {
 | 
						|
	var buffer: Buffer;
 | 
						|
 | 
						|
	function new(bytes: Bytes) {
 | 
						|
		if (bytes != null) {
 | 
						|
			buffer = new Buffer(bytes.length);
 | 
						|
			for (i in 0...bytes.length) {
 | 
						|
				buffer.writeUInt8(bytes.get(i), i);
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	public static function fromBytes(bytes: Bytes): Blob {
 | 
						|
		return new Blob(bytes);
 | 
						|
	}
 | 
						|
 | 
						|
	public static function alloc(size: Int): Blob {
 | 
						|
		var blob = new Blob(null);
 | 
						|
		var array = new Array();
 | 
						|
		array[size - 1] = 0;
 | 
						|
		blob.buffer = new Buffer(array);
 | 
						|
		return blob;
 | 
						|
	}
 | 
						|
 | 
						|
	@:noCompletion
 | 
						|
	public static function _fromBuffer(buffer: Buffer): Blob {
 | 
						|
		var blob = new Blob(null);
 | 
						|
		blob.buffer = buffer;
 | 
						|
		return blob;
 | 
						|
	}
 | 
						|
 | 
						|
	public function sub(start: Int, length: Int): Blob {
 | 
						|
		return _fromBuffer(buffer.slice(start, start + length));
 | 
						|
	}
 | 
						|
 | 
						|
	public var length(get, never): Int;
 | 
						|
 | 
						|
	function get_length(): Int {
 | 
						|
		return buffer.length;
 | 
						|
	}
 | 
						|
 | 
						|
	public function writeU8(position: Int, value: Int): Void {
 | 
						|
		buffer.writeUInt8(value, position);
 | 
						|
	}
 | 
						|
 | 
						|
	public function readU8(position: Int): Int {
 | 
						|
		var byte = buffer.readUInt8(position);
 | 
						|
		++position;
 | 
						|
		return byte;
 | 
						|
	}
 | 
						|
 | 
						|
	public function readS8(position: Int): Int {
 | 
						|
		var byte = buffer.readInt8(position);
 | 
						|
		++position;
 | 
						|
		return byte;
 | 
						|
	}
 | 
						|
 | 
						|
	public function readU16BE(position: Int): Int {
 | 
						|
		var value = buffer.readUInt16BE(position);
 | 
						|
		position += 2;
 | 
						|
		return value;
 | 
						|
	}
 | 
						|
 | 
						|
	public function readU16LE(position: Int): Int {
 | 
						|
		var value = buffer.readUInt16LE(position);
 | 
						|
		position += 2;
 | 
						|
		return value;
 | 
						|
	}
 | 
						|
 | 
						|
	public function readS16BE(position: Int): Int {
 | 
						|
		var value = buffer.readInt16BE(position);
 | 
						|
		position += 2;
 | 
						|
		return value;
 | 
						|
	}
 | 
						|
 | 
						|
	public function readS16LE(position: Int): Int {
 | 
						|
		var value = buffer.readInt16LE(position);
 | 
						|
		position += 2;
 | 
						|
		return value;
 | 
						|
	}
 | 
						|
 | 
						|
	public function readS32BE(position: Int): Int {
 | 
						|
		var value = buffer.readInt32BE(position);
 | 
						|
		position += 4;
 | 
						|
		return value;
 | 
						|
	}
 | 
						|
 | 
						|
	public function readS32LE(position: Int): Int {
 | 
						|
		var value = buffer.readInt32LE(position);
 | 
						|
		position += 4;
 | 
						|
		return value;
 | 
						|
	}
 | 
						|
 | 
						|
	public function readF32BE(position: Int): Float {
 | 
						|
		var value = buffer.readFloatBE(position);
 | 
						|
		position += 4;
 | 
						|
		return value;
 | 
						|
	}
 | 
						|
 | 
						|
	public function readF32LE(position: Int): Float {
 | 
						|
		var value = buffer.readFloatLE(position);
 | 
						|
		position += 4;
 | 
						|
		return value;
 | 
						|
	}
 | 
						|
 | 
						|
	public function toString(): String {
 | 
						|
		return buffer.toString();
 | 
						|
	}
 | 
						|
 | 
						|
	public function readUtf8String(): String {
 | 
						|
		return toString();
 | 
						|
	}
 | 
						|
 | 
						|
	public function toBytes(): Bytes {
 | 
						|
		return Bytes.ofData(cast buffer);
 | 
						|
	}
 | 
						|
 | 
						|
	public function unload(): Void {
 | 
						|
		buffer = null;
 | 
						|
	}
 | 
						|
}
 |