cache: split index data reading off. It is shared with the cache client too.
This commit is contained in:
@@ -120,19 +120,6 @@ public class Archive
|
|||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loadFiles(InputStream stream, int numberOfFiles, int protocol)
|
|
||||||
{
|
|
||||||
int archive = 0;
|
|
||||||
|
|
||||||
for (int i = 0; i < numberOfFiles; ++i)
|
|
||||||
{
|
|
||||||
int fileId = archive += protocol >= 7 ? stream.readBigSmart() : stream.readUnsignedShort();
|
|
||||||
|
|
||||||
FSFile file = new FSFile(this, fileId);
|
|
||||||
this.files.add(file);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void decompressAndLoad(int[] keys) throws IOException
|
public void decompressAndLoad(int[] keys) throws IOException
|
||||||
{
|
{
|
||||||
byte[] encryptedData = this.getData();
|
byte[] encryptedData = this.getData();
|
||||||
@@ -428,16 +415,6 @@ public class Archive
|
|||||||
Collections.sort(files, (f1, f2) -> Integer.compare(f1.getFileId(), f2.getFileId()));
|
Collections.sort(files, (f1, f2) -> Integer.compare(f1.getFileId(), f2.getFileId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void loadNames(InputStream stream, int numberOfFiles)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < numberOfFiles; ++i)
|
|
||||||
{
|
|
||||||
FSFile file = this.files.get(i);
|
|
||||||
int name = stream.readInt();
|
|
||||||
file.setNameHash(name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getArchiveId()
|
public int getArchiveId()
|
||||||
{
|
{
|
||||||
return archiveId;
|
return archiveId;
|
||||||
|
|||||||
105
cache/src/main/java/net/runelite/cache/fs/Index.java
vendored
105
cache/src/main/java/net/runelite/cache/fs/Index.java
vendored
@@ -35,8 +35,10 @@ import java.util.ArrayList;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import net.runelite.cache.index.ArchiveData;
|
||||||
|
import net.runelite.cache.index.FileData;
|
||||||
|
import net.runelite.cache.index.IndexData;
|
||||||
import net.runelite.cache.util.Djb2;
|
import net.runelite.cache.util.Djb2;
|
||||||
import net.runelite.cache.io.InputStream;
|
|
||||||
import net.runelite.cache.io.OutputStream;
|
import net.runelite.cache.io.OutputStream;
|
||||||
import net.runelite.cache.util.Crc32;
|
import net.runelite.cache.util.Crc32;
|
||||||
import net.runelite.cache.util.Whirlpool;
|
import net.runelite.cache.util.Whirlpool;
|
||||||
@@ -347,92 +349,29 @@ public class Index implements Closeable
|
|||||||
|
|
||||||
public void readIndexData(byte[] data)
|
public void readIndexData(byte[] data)
|
||||||
{
|
{
|
||||||
InputStream stream = new InputStream(data);
|
IndexData indexData = new IndexData();
|
||||||
protocol = stream.readUnsignedByte();
|
indexData.load(data);
|
||||||
if (protocol >= 5 && protocol <= 7)
|
|
||||||
|
protocol = indexData.getProtocol();
|
||||||
|
revision = indexData.getRevision();
|
||||||
|
named = indexData.isNamed();
|
||||||
|
usesWhirpool = indexData.isUsesWhirpool();
|
||||||
|
|
||||||
|
for (ArchiveData ad : indexData.getArchives())
|
||||||
{
|
{
|
||||||
if (protocol >= 6)
|
Archive archive = new Archive(this, ad.getId());
|
||||||
|
archive.setNameHash(ad.getNameHash());
|
||||||
|
archive.setWhirlpool(ad.getWhirlpool());
|
||||||
|
archive.setCrc(ad.getCrc());
|
||||||
|
archive.setRevision(ad.getRevision());
|
||||||
|
|
||||||
|
for (FileData fd : ad.getFiles())
|
||||||
{
|
{
|
||||||
this.revision = stream.readInt();
|
FSFile file = archive.addFile(fd.getId());
|
||||||
|
file.setNameHash(fd.getNameHash());
|
||||||
}
|
}
|
||||||
|
|
||||||
int hash = stream.readUnsignedByte();
|
archives.add(archive);
|
||||||
named = (1 & hash) != 0;
|
|
||||||
usesWhirpool = (2 & hash) != 0;
|
|
||||||
assert (hash & ~3) == 0;
|
|
||||||
int validArchivesCount = protocol >= 7 ? stream.readBigSmart() : stream.readUnsignedShort();
|
|
||||||
int lastArchiveId = 0;
|
|
||||||
|
|
||||||
int index;
|
|
||||||
int archive;
|
|
||||||
for (index = 0; index < validArchivesCount; ++index)
|
|
||||||
{
|
|
||||||
archive = lastArchiveId += protocol >= 7 ? stream.readBigSmart() : stream.readUnsignedShort();
|
|
||||||
Archive a = new Archive(this, archive);
|
|
||||||
this.archives.add(a);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (named)
|
|
||||||
{
|
|
||||||
for (index = 0; index < validArchivesCount; ++index)
|
|
||||||
{
|
|
||||||
int nameHash = stream.readInt();
|
|
||||||
Archive a = this.archives.get(index);
|
|
||||||
a.setNameHash(nameHash);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (usesWhirpool)
|
|
||||||
{
|
|
||||||
for (index = 0; index < validArchivesCount; ++index)
|
|
||||||
{
|
|
||||||
byte[] var13 = new byte[64];
|
|
||||||
stream.readBytes(var13);
|
|
||||||
|
|
||||||
Archive a = this.archives.get(index);
|
|
||||||
a.setWhirlpool(var13);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (index = 0; index < validArchivesCount; ++index)
|
|
||||||
{
|
|
||||||
int crc = stream.readInt();
|
|
||||||
|
|
||||||
Archive a = this.archives.get(index);
|
|
||||||
a.setCrc(crc);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (index = 0; index < validArchivesCount; ++index)
|
|
||||||
{
|
|
||||||
int revision = stream.readInt();
|
|
||||||
|
|
||||||
Archive a = this.archives.get(index);
|
|
||||||
a.setRevision(revision);
|
|
||||||
}
|
|
||||||
|
|
||||||
int[] numberOfFiles = new int[validArchivesCount];
|
|
||||||
for (index = 0; index < validArchivesCount; ++index)
|
|
||||||
{
|
|
||||||
int num = protocol >= 7 ? stream.readBigSmart() : stream.readUnsignedShort();
|
|
||||||
numberOfFiles[index] = num;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (index = 0; index < validArchivesCount; ++index)
|
|
||||||
{
|
|
||||||
archive = 0;
|
|
||||||
|
|
||||||
Archive a = this.archives.get(index);
|
|
||||||
a.loadFiles(stream, numberOfFiles[index], protocol);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (named)
|
|
||||||
{
|
|
||||||
for (index = 0; index < validArchivesCount; ++index)
|
|
||||||
{
|
|
||||||
Archive a = this.archives.get(index);
|
|
||||||
a.loadNames(stream, numberOfFiles[index]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
95
cache/src/main/java/net/runelite/cache/index/ArchiveData.java
vendored
Normal file
95
cache/src/main/java/net/runelite/cache/index/ArchiveData.java
vendored
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016-2017, Adam <Adam@sigterm.info>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package net.runelite.cache.index;
|
||||||
|
|
||||||
|
public class ArchiveData
|
||||||
|
{
|
||||||
|
int id;
|
||||||
|
int nameHash;
|
||||||
|
byte[] whirlpool;
|
||||||
|
int crc;
|
||||||
|
int revision;
|
||||||
|
FileData[] files;
|
||||||
|
|
||||||
|
public int getId()
|
||||||
|
{
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(int id)
|
||||||
|
{
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getNameHash()
|
||||||
|
{
|
||||||
|
return nameHash;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNameHash(int nameHash)
|
||||||
|
{
|
||||||
|
this.nameHash = nameHash;
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] getWhirlpool()
|
||||||
|
{
|
||||||
|
return whirlpool;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWhirlpool(byte[] whirlpool)
|
||||||
|
{
|
||||||
|
this.whirlpool = whirlpool;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCrc()
|
||||||
|
{
|
||||||
|
return crc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCrc(int crc)
|
||||||
|
{
|
||||||
|
this.crc = crc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRevision()
|
||||||
|
{
|
||||||
|
return revision;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRevision(int revision)
|
||||||
|
{
|
||||||
|
this.revision = revision;
|
||||||
|
}
|
||||||
|
|
||||||
|
public FileData[] getFiles()
|
||||||
|
{
|
||||||
|
return files;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFiles(FileData[] files)
|
||||||
|
{
|
||||||
|
this.files = files;
|
||||||
|
}
|
||||||
|
}
|
||||||
51
cache/src/main/java/net/runelite/cache/index/FileData.java
vendored
Normal file
51
cache/src/main/java/net/runelite/cache/index/FileData.java
vendored
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016-2017, Adam <Adam@sigterm.info>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package net.runelite.cache.index;
|
||||||
|
|
||||||
|
public class FileData
|
||||||
|
{
|
||||||
|
int id;
|
||||||
|
int nameHash;
|
||||||
|
|
||||||
|
public int getId()
|
||||||
|
{
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(int id)
|
||||||
|
{
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getNameHash()
|
||||||
|
{
|
||||||
|
return nameHash;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNameHash(int nameHash)
|
||||||
|
{
|
||||||
|
this.nameHash = nameHash;
|
||||||
|
}
|
||||||
|
}
|
||||||
197
cache/src/main/java/net/runelite/cache/index/IndexData.java
vendored
Normal file
197
cache/src/main/java/net/runelite/cache/index/IndexData.java
vendored
Normal file
@@ -0,0 +1,197 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016-2017, Adam <Adam@sigterm.info>
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
* list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package net.runelite.cache.index;
|
||||||
|
|
||||||
|
import net.runelite.cache.io.InputStream;
|
||||||
|
|
||||||
|
public class IndexData
|
||||||
|
{
|
||||||
|
private int protocol;
|
||||||
|
private int revision;
|
||||||
|
private boolean named;
|
||||||
|
private boolean usesWhirpool;
|
||||||
|
private ArchiveData[] archives;
|
||||||
|
|
||||||
|
public void load(byte[] data)
|
||||||
|
{
|
||||||
|
InputStream stream = new InputStream(data);
|
||||||
|
protocol = stream.readUnsignedByte();
|
||||||
|
if (protocol < 5 || protocol > 7)
|
||||||
|
{
|
||||||
|
throw new IllegalArgumentException("Unsupported protocol");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (protocol >= 6)
|
||||||
|
{
|
||||||
|
this.revision = stream.readInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
int hash = stream.readUnsignedByte();
|
||||||
|
named = (1 & hash) != 0;
|
||||||
|
usesWhirpool = (2 & hash) != 0;
|
||||||
|
assert (hash & ~3) == 0;
|
||||||
|
int validArchivesCount = protocol >= 7 ? stream.readBigSmart() : stream.readUnsignedShort();
|
||||||
|
int lastArchiveId = 0;
|
||||||
|
|
||||||
|
archives = new ArchiveData[validArchivesCount];
|
||||||
|
|
||||||
|
for (int index = 0; index < validArchivesCount; ++index)
|
||||||
|
{
|
||||||
|
int archive = lastArchiveId += protocol >= 7 ? stream.readBigSmart() : stream.readUnsignedShort();
|
||||||
|
|
||||||
|
ArchiveData ad = new ArchiveData();
|
||||||
|
ad.id = archive;
|
||||||
|
archives[index] = ad;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (named)
|
||||||
|
{
|
||||||
|
for (int index = 0; index < validArchivesCount; ++index)
|
||||||
|
{
|
||||||
|
int nameHash = stream.readInt();
|
||||||
|
ArchiveData ad = archives[index];
|
||||||
|
ad.nameHash = nameHash;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (usesWhirpool)
|
||||||
|
{
|
||||||
|
for (int index = 0; index < validArchivesCount; ++index)
|
||||||
|
{
|
||||||
|
byte[] w = new byte[64];
|
||||||
|
stream.readBytes(w);
|
||||||
|
|
||||||
|
ArchiveData ad = archives[index];
|
||||||
|
ad.whirlpool = w;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int index = 0; index < validArchivesCount; ++index)
|
||||||
|
{
|
||||||
|
int crc = stream.readInt();
|
||||||
|
|
||||||
|
ArchiveData ad = archives[index];
|
||||||
|
ad.crc = crc;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int index = 0; index < validArchivesCount; ++index)
|
||||||
|
{
|
||||||
|
int revision = stream.readInt();
|
||||||
|
|
||||||
|
ArchiveData ad = archives[index];
|
||||||
|
ad.revision = revision;
|
||||||
|
}
|
||||||
|
|
||||||
|
int[] numberOfFiles = new int[validArchivesCount];
|
||||||
|
for (int index = 0; index < validArchivesCount; ++index)
|
||||||
|
{
|
||||||
|
int num = protocol >= 7 ? stream.readBigSmart() : stream.readUnsignedShort();
|
||||||
|
numberOfFiles[index] = num;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int index = 0; index < validArchivesCount; ++index)
|
||||||
|
{
|
||||||
|
ArchiveData ad = archives[index];
|
||||||
|
int num = numberOfFiles[index];
|
||||||
|
|
||||||
|
ad.files = new FileData[num];
|
||||||
|
|
||||||
|
int last = 0;
|
||||||
|
for (int i = 0; i < num; ++i)
|
||||||
|
{
|
||||||
|
int fileId = last += protocol >= 7 ? stream.readBigSmart() : stream.readUnsignedShort();
|
||||||
|
|
||||||
|
FileData fd = ad.files[i] = new FileData();
|
||||||
|
fd.id = fileId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (named)
|
||||||
|
{
|
||||||
|
for (int index = 0; index < validArchivesCount; ++index)
|
||||||
|
{
|
||||||
|
ArchiveData ad = archives[index];
|
||||||
|
int num = numberOfFiles[index];
|
||||||
|
|
||||||
|
for (int i = 0; i < num; ++i)
|
||||||
|
{
|
||||||
|
FileData fd = ad.files[i];
|
||||||
|
int name = stream.readInt();
|
||||||
|
fd.nameHash = name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getProtocol()
|
||||||
|
{
|
||||||
|
return protocol;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProtocol(int protocol)
|
||||||
|
{
|
||||||
|
this.protocol = protocol;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getRevision()
|
||||||
|
{
|
||||||
|
return revision;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRevision(int revision)
|
||||||
|
{
|
||||||
|
this.revision = revision;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isNamed()
|
||||||
|
{
|
||||||
|
return named;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNamed(boolean named)
|
||||||
|
{
|
||||||
|
this.named = named;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isUsesWhirpool()
|
||||||
|
{
|
||||||
|
return usesWhirpool;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUsesWhirpool(boolean usesWhirpool)
|
||||||
|
{
|
||||||
|
this.usesWhirpool = usesWhirpool;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ArchiveData[] getArchives()
|
||||||
|
{
|
||||||
|
return archives;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setArchives(ArchiveData[] archives)
|
||||||
|
{
|
||||||
|
this.archives = archives;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user