rendered paste body/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*
* http://www.gnu.org/copyleft/gpl.html
*/
package net.sf.l2j;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays;
/**
* @author Myrdos
*
*/
public class Database
{
int t,r;//temp vars
byte[] a;//temp array
private String[][] DBtags = new String[0][];
private short[] valueTypeList = new short[0];//-1=tagList with tag value list (no need for value type list)
private byte[][] valuesType = new byte[0][];//value type of the tag's list ID
private short[][] listID = new short[0][];//the list ID of tags, ints, Strings, longs or doubles
public int getTagPosition(int DBList,String tag)
{
return Arrays.binarySearch(DBtags[DBList],tag);
}
public byte getTagValuesType(int DBList,int tagPos)
{
if(valueTypeList[DBList]==-1)
{
return -1;
}
return valuesType[valueTypeList[DBList]][tagPos];
}
public int getTagListID(int DBList,int tagPos)
{
return listID[DBList][tagPos];
}
//ints
private int[][] intList = new int[0][];
public void addIntArray()
{
intList=(int[][])(resizeArrayBigger(intList));
}
public void removeIntArray()
{
intList=(int[][])(resizeArraySmaller(intList));
}
public void addIntValueToArray(int value,int DBLink)
{
intList[DBLink]=(int[])(resizeArrayBigger(intList[DBLink]));
intList[DBLink][intList[DBLink].length-1]=value;
}
public void addIntValuesToArray(int[] values,int DBLink)
{
intList[DBLink]=(int[])(resizeArrayBigger(intList[DBLink],values.length));
for(t=values.length;t>0;t--)
{
intList[DBLink][intList[DBLink].length-t]=values[values.length-t];
}
}
public void setIntValueToArray(int value,int position,int DBLink)
{
intList[DBLink]=(int[])(resizeArrayBigger(intList[DBLink]));
intList[DBLink][position]=value;
}
public void setIntValuesToArray(int[] values,int position,int DBLink)
{
intList[DBLink]=(int[])(resizeArrayBigger(intList[DBLink],values.length));
for(t=0;t<values.length;t++)
{
intList[DBLink][position+t]=values[t];
}
}
public void copyIntValueFromArray(int fromPosition,int toPosition,int DBLink)
{
intList[DBLink][toPosition]=intList[DBLink][fromPosition];
}
public void removeIntValueFromArray(int DBLink)
{
intList[DBLink]=(int[])(resizeArraySmaller(intList[DBLink]));
}
public void removeIntValuesFromArray(int values,int DBLink)
{
intList[DBLink]=(int[])(resizeArraySmaller(intList[DBLink],values));
}
//Strings
private String[][] StringList = new String[0][];
public void addStringArray()
{
StringList=(String[][])(resizeArrayBigger(StringList));
}
public void removeStringArray()
{
StringList=(String[][])(resizeArraySmaller(StringList));
}
public void addStringValueToArray(String value,int DBLink)
{
StringList[DBLink]=(String[])(resizeArrayBigger(StringList[DBLink]));
StringList[DBLink][StringList[DBLink].length-1]=value;
}
public void addStringValuesToArray(String[] values,int DBLink)
{
StringList[DBLink]=(String[])(resizeArrayBigger(StringList[DBLink],values.length));
for(t=values.length;t>0;t--)
{
StringList[DBLink][StringList[DBLink].length-t]=values[values.length-t];
}
}
public void setStringValueToArray(String value,int position,int DBLink)
{
StringList[DBLink]=(String[])(resizeArrayBigger(StringList[DBLink]));
StringList[DBLink][position]=value;
}
public void setStringValuesToArray(String[] values,int position,int DBLink)
{
StringList[DBLink]=(String[])(resizeArrayBigger(StringList[DBLink],values.length));
for(t=0;t<values.length;t++)
{
StringList[DBLink][position+t]=values[t];
}
}
public void copyStringValueFromArray(int fromPosition,int toPosition,int DBLink)
{
StringList[DBLink][toPosition]=StringList[DBLink][fromPosition];
}
public void removeStringValueFromArray(int DBLink)
{
StringList[DBLink]=(String[])(resizeArraySmaller(StringList[DBLink]));
}
public void removeStringValuesFromArray(int values,int DBLink)
{
StringList[DBLink]=(String[])(resizeArraySmaller(StringList[DBLink],values));
}
//longs
private long[][] longList = new long[0][];
public void addLongArray()
{
longList=(long[][])(resizeArrayBigger(longList));
}
public void removeLongArray()
{
longList=(long[][])(resizeArraySmaller(longList));
}
public void addLongValueToArray(long value,int DBLink)
{
longList[DBLink]=(long[])(resizeArrayBigger(longList[DBLink]));
longList[DBLink][longList[DBLink].length-1]=value;
}
public void addLongValuesToArray(long[] values,int DBLink)
{
longList[DBLink]=(long[])(resizeArrayBigger(longList[DBLink],values.length));
for(t=values.length;t>0;t--)
{
longList[DBLink][longList[DBLink].length-t]=values[values.length-t];
}
}
public void setLongValueToArray(long value,int position,int DBLink)
{
longList[DBLink]=(long[])(resizeArrayBigger(longList[DBLink]));
longList[DBLink][position]=value;
}
public void setLongValuesToArray(long[] values,int position,int DBLink)
{
longList[DBLink]=(long[])(resizeArrayBigger(longList[DBLink],values.length));
for(t=0;t<values.length;t++)
{
longList[DBLink][position+t]=values[t];
}
}
public void copyLongValueFromArray(int fromPosition,int toPosition,int DBLink)
{
longList[DBLink][toPosition]=longList[DBLink][fromPosition];
}
public void removeLongValueFromArray(int DBLink)
{
longList[DBLink]=(long[])(resizeArraySmaller(longList[DBLink]));
}
public void removeLongValuesFromArray(int values,int DBLink)
{
longList[DBLink]=(long[])(resizeArraySmaller(longList[DBLink],values));
}
//doubles
private double[][] doubleList = new double[0][];
public void addDoubleArray()
{
doubleList=(double[][])(resizeArrayBigger(doubleList));
}
public void removeDoubleArray()
{
doubleList=(double[][])(resizeArraySmaller(doubleList));
}
public void addDoubleValueToArray(double value,int DBLink)
{
doubleList[DBLink]=(double[])(resizeArrayBigger(doubleList[DBLink]));
doubleList[DBLink][doubleList[DBLink].length-1]=value;
}
public void addDoubleValuesToArray(double[] values,int DBLink)
{
doubleList[DBLink]=(double[])(resizeArrayBigger(doubleList[DBLink],values.length));
for(t=values.length;t>0;t--)
{
doubleList[DBLink][doubleList[DBLink].length-t]=values[values.length-t];
}
}
public void setDoubleValueToArray(double value,int position,int DBLink)
{
doubleList[DBLink]=(double[])(resizeArrayBigger(doubleList[DBLink]));
doubleList[DBLink][position]=value;
}
public void setDoubleValuesToArray(double[] values,int position,int DBLink)
{
doubleList[DBLink]=(double[])(resizeArrayBigger(doubleList[DBLink],values.length));
for(t=0;t<values.length;t++)
{
doubleList[DBLink][position+t]=values[t];
}
}
public void copyDoubleValueFromArray(int fromPosition,int toPosition,int DBLink)
{
doubleList[DBLink][toPosition]=doubleList[DBLink][fromPosition];
}
public void removeDoubleValueFromArray(int DBLink)
{
doubleList[DBLink]=(double[])(resizeArraySmaller(doubleList[DBLink]));
}
public void removeDoubleValuesFromArray(int values,int DBLink)
{
doubleList[DBLink]=(double[])(resizeArraySmaller(doubleList[DBLink],values));
}
private static Object resizeArrayBigger(Object oldArray, int amountToAdd)
{
Object newArray = java.lang.reflect.Array.newInstance(oldArray.getClass().getComponentType(),java.lang.reflect.Array.getLength(oldArray)+amountToAdd);
System.arraycopy(oldArray,0,newArray,0,java.lang.reflect.Array.getLength(oldArray));
return newArray;
}
private static Object resizeArrayBigger(Object oldArray)
{
Object newArray = java.lang.reflect.Array.newInstance(oldArray.getClass().getComponentType(),java.lang.reflect.Array.getLength(oldArray)+1);
System.arraycopy(oldArray,0,newArray,0,java.lang.reflect.Array.getLength(oldArray));
return newArray;
}
private static Object resizeArraySmaller(Object oldArray, int amountToRemove)
{
Object newArray = java.lang.reflect.Array.newInstance(oldArray.getClass().getComponentType(),java.lang.reflect.Array.getLength(oldArray)-amountToRemove);
System.arraycopy(oldArray,0,newArray,0,java.lang.reflect.Array.getLength(newArray));
return newArray;
}
private static Object resizeArraySmaller(Object oldArray)
{
Object newArray = java.lang.reflect.Array.newInstance(oldArray.getClass().getComponentType(),java.lang.reflect.Array.getLength(oldArray)-1);
System.arraycopy(oldArray,0,newArray,0,java.lang.reflect.Array.getLength(newArray));
return newArray;
}
public void importDBFromHD() throws IOException
{
InputStream fin = new FileInputStream("L2J.db");
DataInputStream in = new DataInputStream(fin);
intList = new int[in.readShort()][];
for(t=0;t<intList.length;t++)
{
intList[t] = new int[in.readInt()];
for(r=0;r<intList[t].length;r++)
{
intList[t][r] = in.readInt();
}
}
StringList = new String[in.readShort()][];
for(t=0;t<StringList.length;t++)
{
StringList[t] = new String[in.readInt()];
for(r=0;r<StringList[t].length;r++)
{
a = new byte[in.readShort()];
in.read(a);
StringList[t][r] = a.toString();
}
}
doubleList = new double[in.readShort()][];
for(t=0;t<doubleList.length;t++)
{
doubleList[t] = new double[in.readInt()];
for(r=0;r<doubleList[t].length;r++)
{
doubleList[t][r] = in.readDouble();
}
}
longList = new long[in.readShort()][];
for(t=0;t<longList.length;t++)
{
longList[t] = new long[in.readInt()];
for(r=0;r<longList[t].length;r++)
{
longList[t][r] = in.readLong();
}
}
DBtags = new String[in.readShort()][];
for(t=0;t<DBtags.length;t++)
{
DBtags[t] = new String[in.readShort()];
for(r=0;r<DBtags[t].length;r++)
{
a = new byte[in.readShort()];
in.read(a);
DBtags[t][r] = a.toString();
}
}
valueTypeList = new short[in.readShort()];
for(t=0;t<valueTypeList.length;t++)
{
valueTypeList[t] = in.readShort();
}
valuesType = new byte[in.readShort()][];
for(t=0;t<valuesType.length;t++)
{
valuesType[t] = new byte[in.readShort()];
for(r=0;r<valuesType[t].length;r++)
{
valuesType[t][r] = in.readByte();
}
}
listID = new short[in.readShort()][];
for(t=0;t<listID.length;t++)
{
listID[t] = new short[in.readShort()];
for(r=0;r<listID[t].length;r++)
{
listID[t][r] = in.readShort();
}
}
in.close();
}
public void exportDBToHD() throws IOException
{//intList,StringList,doubleList,longList
OutputStream fout = new FileOutputStream("L2J.db");
DataOutputStream out = new DataOutputStream(fout);
out.writeShort(intList.length);
for(t=0;t<intList.length;t++)
{
out.writeInt(intList[t].length);
for(r=0;r<intList[t].length;r++)
{
out.writeInt(intList[t][r]);
}
}
out.writeShort(StringList.length);
for(t=0;t<StringList.length;t++)
{
out.writeInt(StringList[t].length);
for(r=0;r<StringList[t].length;r++)
{
out.writeShort(StringList[t][r].length());
out.writeBytes(StringList[t][r]);
}
}
out.writeShort(doubleList.length);
for(t=0;t<doubleList.length;t++)
{
out.writeInt(doubleList[t].length);
for(r=0;r<doubleList[t].length;r++)
{
out.writeDouble(doubleList[t][r]);
}
}
out.writeShort(longList.length);
for(t=0;t<longList.length;t++)
{
out.writeInt(longList[t].length);
for(r=0;r<longList[t].length;r++)
{
out.writeLong(longList[t][r]);
}
}
//DBtags,valueTypeList,valuesType,listID
out.writeShort(DBtags.length);
for(t=0;t<DBtags.length;t++)
{
out.writeShort(DBtags[t].length);
for(r=0;r<DBtags[t].length;r++)
{
out.writeShort(DBtags[t][r].length());
out.writeBytes(DBtags[t][r]);
}
}
out.writeShort(valueTypeList.length);
for(t=0;t<valueTypeList.length;t++)
{
out.writeShort(valueTypeList[t]);
}
out.writeShort(valuesType.length);
for(t=0;t<valuesType.length;t++)
{
out.writeShort(valuesType[t].length);
for(r=0;r<valuesType[t].length;r++)
{
out.writeByte(valuesType[t][r]);
}
}
out.writeShort(listID.length);
for(t=0;t<listID.length;t++)
{
out.writeShort(listID[t].length);
for(r=0;r<listID[t].length;r++)
{
out.writeShort(listID[t][r]);
}
}
out.close();
}
public void importDBFromSQL()
{
}
public void exportDBToSQL()
{
}
}