forked from jMonkeyEngine/jmonkeyengine
/
BinaryLoader.java
78 lines (64 loc) · 2.01 KB
/
BinaryLoader.java
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
75
76
77
78
package com.jme3.export.binary;
import com.jme3.asset.AssetInfo;
import com.jme3.asset.AssetManager;
import com.jme3.export.InputCapsule;
import com.jme3.export.JmeImporter;
import com.jme3.export.Savable;
import java.io.IOException;
import java.util.ArrayDeque;
import java.util.Deque;
/**
* The default loader to load binaries files.
*
* @author JavaSaBr
*/
public class BinaryLoader implements JmeImporter {
/**
* The thread local importers.
*/
private final ThreadLocal<Deque<BinaryImporter>> threadLocalImporters;
/**
* The current importer.
*/
private final ThreadLocal<BinaryImporter> currentImporter;
public BinaryLoader() {
currentImporter = new ThreadLocal<>();
threadLocalImporters = new ThreadLocal<Deque<BinaryImporter>>() {
@Override
protected Deque<BinaryImporter> initialValue() {
return new ArrayDeque<>();
}
};
}
@Override
public InputCapsule getCapsule(final Savable id) {
final BinaryImporter importer = currentImporter.get();
return importer.getCapsule(id);
}
@Override
public AssetManager getAssetManager() {
final BinaryImporter importer = currentImporter.get();
return importer.getAssetManager();
}
@Override
public int getFormatVersion() {
final BinaryImporter importer = currentImporter.get();
return importer.getFormatVersion();
}
@Override
public Object load(final AssetInfo assetInfo) throws IOException {
final Deque<BinaryImporter> importers = threadLocalImporters.get();
BinaryImporter importer = importers.pollLast();
if (importer == null) {
importer = new BinaryImporter();
}
final BinaryImporter prev = currentImporter.get();
currentImporter.set(importer);
try {
return importer.load(assetInfo);
} finally {
importers.addLast(importer);
currentImporter.set(prev);
}
}
}