/*
* $Id: AnyArray.java,v 1.10 2002/09/16 08:05:02 jkl Exp $
*
* Copyright (c) 2002 Njet Communications Ltd. All Rights Reserved.
*
* Use is subject to license terms, as defined in
* Anvil Sofware License, Version 1.1. See LICENSE
* file, or http://njet.org/license-1.1.txt
*/
package anvil.core.arrays;
import anvil.core.Any;
import anvil.core.AnySequence;
import anvil.core.AnyAbstractClass;
import anvil.core.Serializer;
import anvil.core.Unserializer;
import anvil.core.UnserializationException;
import anvil.script.Context;
import java.io.Writer;
import java.io.Writer;
import java.io.IOException;
/**
* class AnyArray
*
* @author: Jani Lehtim�ki
*/
public abstract class AnyArray extends AnySequence
{
public anvil.script.ClassType classOf()
{
return __class__;
}
public boolean isClass()
{
return true;
}
public int typeOf()
{
return IS_CLASS;
}
public boolean isCompatible(Any element)
{
return getClass() == element.getClass();
}
public String toString()
{
StringBuffer buffer = new StringBuffer();
buffer.append('{');
int n = getSize();
for(int i=0; i<n; i++) {
if (i>0) {
buffer.append(',');
buffer.append(' ');
}
buffer.append(getElement(i).toString());
}
buffer.append('}');
return buffer.toString();
}
public Writer toAnvil(Writer writer) throws java.io.IOException
{
writer.write("new anvil.arrays.");
writer.write(classOf().getName());
writer.write('(');
int n = getSize();
for(int i=0; i<n; i++) {
if (i>0) {
writer.write(',');
writer.write(' ');
}
getElement(i).toAnvil(writer);
}
writer.write(')');
return writer;
}
public static final Any unserialize(Unserializer unserializer) throws UnserializationException
{
int ch = unserializer.get();
int size = (int)unserializer.getLong();
switch(ch) {
case (byte)'b':
return AnyBooleanArray.unserialize(unserializer, size);
case (byte)'c':
return AnyCharArray.unserialize(unserializer, size);
case (byte)'s':
return AnyShortArray.unserialize(unserializer, size);
case (byte)'i':
return AnyIntArray.unserialize(unserializer, size);
case (byte)'j':
return AnyLongArray.unserialize(unserializer, size);
case (byte)'f':
return AnyFloatArray.unserialize(unserializer, size);
case (byte)'d':
return AnyDoubleArray.unserialize(unserializer, size);
case (byte)'S':
return AnyStringArray.unserialize(unserializer, size);
case (byte)'o':
return AnyObjectArray.unserialize(unserializer, size);
default:
throw new UnserializationException("Invalid array subtype: "+ch);
}
}
public abstract Any copy();
public Object clone()
{
return copy();
}
}