mirror of
https://github.com/Maschell/JNUSLib.git
synced 2024-11-22 07:59:19 +01:00
[FSTEntry] Build path from parents instead of caching it.
This commit is contained in:
parent
6d98a8b92c
commit
015e3fff18
@ -16,6 +16,7 @@
|
||||
****************************************************************************/
|
||||
package de.mas.wiiu.jnus.entities.fst;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.PrintStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -37,7 +38,6 @@ public class FSTEntry {
|
||||
public static final byte FSTEntry_notInNUS = (byte) 0x80;
|
||||
|
||||
@Getter private final String filename;
|
||||
@Getter private final String path;
|
||||
@Getter private final FSTEntry parent;
|
||||
|
||||
@Getter private final List<FSTEntry> children = new ArrayList<>();
|
||||
@ -91,6 +91,17 @@ public class FSTEntry {
|
||||
return getPath() + getFilename();
|
||||
}
|
||||
|
||||
private StringBuilder getPathInternal() {
|
||||
if (parent != null) {
|
||||
return parent.getPathInternal().append(parent.getFilename()).append(File.separator);
|
||||
}
|
||||
return new StringBuilder();
|
||||
}
|
||||
|
||||
public String getPath() {
|
||||
return getPathInternal().toString();
|
||||
}
|
||||
|
||||
public int getEntryCount() {
|
||||
int count = 1;
|
||||
for (FSTEntry entry : getChildren()) {
|
||||
@ -174,14 +185,13 @@ public class FSTEntry {
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "FSTEntry [filename=" + filename + ", path=" + path + ", flags=" + flags + ", filesize=" + fileSize + ", fileoffset=" + fileOffset + ", content="
|
||||
+ content + ", isDir=" + isDir + ", isRoot=" + isRoot + ", notInPackage=" + isNotInPackage + "]";
|
||||
return "FSTEntry [filename=" + getFilename() + ", path=" + getPath() + ", flags=" + flags + ", filesize=" + fileSize + ", fileoffset=" + fileOffset
|
||||
+ ", content=" + content + ", isDir=" + isDir + ", isRoot=" + isRoot + ", notInPackage=" + isNotInPackage + "]";
|
||||
}
|
||||
|
||||
@Data
|
||||
protected static class FSTEntryParam {
|
||||
private String filename = "";
|
||||
private String path = "";
|
||||
|
||||
private FSTEntry parent = null;
|
||||
|
||||
|
@ -39,10 +39,6 @@ public final class FSTService {
|
||||
int level = 0;
|
||||
int[] LEntry = new int[16];
|
||||
int[] Entry = new int[16];
|
||||
String[] pathStrings = new String[16];
|
||||
for (int i = 0; i < 16; i++) {
|
||||
pathStrings[i] = "";
|
||||
}
|
||||
|
||||
HashMap<Integer, FSTEntry> fstEntryToOffsetMap = new HashMap<>();
|
||||
Entry[level] = 0;
|
||||
@ -51,9 +47,7 @@ public final class FSTService {
|
||||
fstEntryToOffsetMap.put(0, rootEntry);
|
||||
|
||||
int lastlevel = level;
|
||||
String path = File.separator;
|
||||
|
||||
FSTEntry last = null;
|
||||
for (int i = 1; i < totalEntries; i++) {
|
||||
|
||||
int entryOffset = i;
|
||||
@ -68,7 +62,6 @@ public final class FSTService {
|
||||
FSTEntryParam entryParam = new FSTEntry.FSTEntryParam();
|
||||
|
||||
if (lastlevel != level) {
|
||||
path = pathStrings[level] + getFullPath(level - 1, level, fstSection, namesSection, Entry);
|
||||
lastlevel = level;
|
||||
}
|
||||
|
||||
@ -92,7 +85,6 @@ public final class FSTService {
|
||||
parent = fstEntryToOffsetMap.get(parentOffset);
|
||||
Entry[level] = i;
|
||||
LEntry[level++] = nextOffset;
|
||||
pathStrings[level] = path;
|
||||
|
||||
if (level > 15) {
|
||||
log.warning("level > 15");
|
||||
@ -107,7 +99,6 @@ public final class FSTService {
|
||||
|
||||
entryParam.setFlags(flags);
|
||||
entryParam.setFilename(filename);
|
||||
entryParam.setPath(path);
|
||||
|
||||
if (contentsByIndex != null) {
|
||||
Content content = contentsByIndex.get((int) contentIndex);
|
||||
@ -129,7 +120,6 @@ public final class FSTService {
|
||||
entryParam.setParent(parent);
|
||||
|
||||
FSTEntry entry = new FSTEntry(entryParam);
|
||||
last = entry;
|
||||
fstEntryToOffsetMap.put(entryOffset, entry);
|
||||
}
|
||||
|
||||
@ -154,15 +144,4 @@ public final class FSTService {
|
||||
return (new String(Arrays.copyOfRange(namesSection, nameOffset, nameOffset + j)));
|
||||
}
|
||||
|
||||
public static String getFullPath(int startlevel, int endlevel, byte[] fstSection, byte[] namesSection, int[] Entry) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = startlevel; i < endlevel; i++) {
|
||||
int entryOffset = Entry[i] * 0x10;
|
||||
byte[] entryData = Arrays.copyOfRange(fstSection, entryOffset, entryOffset + 10);
|
||||
String entryName = getName(entryData, namesSection);
|
||||
|
||||
sb.append(entryName).append(File.separator);
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user