-
Notifications
You must be signed in to change notification settings - Fork 338
/
FileEntry.hx
74 lines (61 loc) · 2.5 KB
/
FileEntry.hx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package hxd.fs;
class FileEntry {
public var name(default, null) : String;
public var path(get, never) : String;
public var directory(get, never) : String;
public var extension(get, never) : String;
public var size(get, never) : Int;
public var isDirectory(get, never) : Bool;
public var isAvailable(get, never) : Bool;
public function getBytes() : haxe.io.Bytes return null;
public function readBytes( out : haxe.io.Bytes, outPos : Int, pos : Int, len : Int ) : Int { throw "readBytes() not implemented"; }
static var TMP_BYTES : haxe.io.Bytes = null;
/**
Similar to readBytes except :
a) a temporary buffer is reused, meaning a single fetchBytes must occur at a single time
b) it will throw an Eof exception if the data is not available
**/
public function fetchBytes( pos, len ) : haxe.io.Bytes {
var bytes = TMP_BYTES;
if( bytes == null || bytes.length < len ) {
var allocSize = (len + 65535) & 0xFFFF0000;
bytes = haxe.io.Bytes.alloc(allocSize);
TMP_BYTES = bytes;
}
readFull(bytes,pos,len);
return bytes;
}
public function readFull( bytes, pos, len ) {
if( readBytes(bytes,0,pos,len) < len )
throw new haxe.io.Eof();
}
/**
Read first 4 bytes of the file.
**/
public function getSign() : Int {
var bytes = fetchBytes(0, 4);
return bytes.get(0) | (bytes.get(1) << 8) | (bytes.get(2) << 16) | (bytes.get(3) << 24);
}
public function getText() return getBytes().toString();
public function open() return @:privateAccess new FileInput(this);
public function load( ?onReady : Void -> Void ) : Void { if( !isAvailable ) throw "load() not implemented"; else if( onReady != null ) onReady(); }
public function loadBitmap( onLoaded : LoadedBitmap -> Void ) : Void { throw "loadBitmap() not implemented"; }
public function watch( onChanged : Null<Void -> Void> ) { }
public function exists( name : String ) : Bool return false;
public function get( name : String ) : FileEntry return null;
public function iterator() : hxd.impl.ArrayIterator<FileEntry> return null;
function get_isAvailable() return true;
function get_isDirectory() return false;
function get_size() return 0;
function get_path() : String { throw "path() not implemented"; return null; };
function get_directory() {
var idx = path.lastIndexOf("/");
if (idx < 0) return "";
return path.substr(0, idx);
}
function get_extension() {
var idx = name.lastIndexOf(".");
if (idx < 0) return "";
return name.substr(idx+1).toLowerCase();
}
}