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