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;
 | |
| 	}
 | |
| }
 |