All pastes #42050 Raw Edit

Stuff

public text v1 · immutable
#42050 ·published 2006-02-18 15:02 UTC
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()
    {
        
    }
}