/// <summary>
/// Reads arrays
/// </summary>
/// <param name="abstractHessianInput">Hessian Input instance</param>
/// <param name="intLength">Array length</param>
/// <exception cref="CHessianException"/>
/// <returns>Read object</returns>
public override Object ReadList(AbstractHessianInput abstractHessianInput, int intLength)
{
switch (m_intCode)
{
case INTEGER_ARRAY:
{
if (intLength >= 0)
{
int []arrData = new int[intLength];
abstractHessianInput.AddRef(arrData);
for (int i = 0; i < arrData.Length; i++)
arrData[i] = abstractHessianInput.ReadInt();
abstractHessianInput.ReadEnd();
return arrData;
}
else
{
ArrayList arrayList = new ArrayList();
while (! abstractHessianInput.IsEnd())
arrayList.Add(abstractHessianInput.ReadInt());
abstractHessianInput.ReadEnd();
int []arrData = new int[arrayList.Count];
for (int i = 0; i < arrData.Length; i++)
arrData[i] = (int) arrayList[i];
abstractHessianInput.AddRef(arrData);
return arrData;
}
}
case SBYTE_ARRAY:
{
if (intLength >= 0)
{
sbyte[] arrData = new sbyte[intLength];
abstractHessianInput.AddRef(arrData);
for (int i = 0; i < arrData.Length; i++)
arrData[i] = (sbyte)abstractHessianInput.ReadInt();
abstractHessianInput.ReadEnd();
return arrData;
}
else
{
ArrayList arrayList = new ArrayList();
while (!abstractHessianInput.IsEnd())
arrayList.Add(abstractHessianInput.ReadInt());
abstractHessianInput.ReadEnd();
sbyte[] arrData = new sbyte[arrayList.Count];
for (int i = 0; i < arrData.Length; i++)
arrData[i] = (sbyte)arrayList[i];
abstractHessianInput.AddRef(arrData);
return arrData;
}
}
case STRING_ARRAY:
{
if (intLength >= 0)
{
string []arrData = new String[intLength];
abstractHessianInput.AddRef(arrData);
for (int i = 0; i < arrData.Length; i++)
arrData[i] = abstractHessianInput.ReadString();
abstractHessianInput.ReadEnd();
return arrData;
}
else
{
ArrayList arrayList = new ArrayList();
while (! abstractHessianInput.IsEnd())
arrayList.Add(abstractHessianInput.ReadString());
abstractHessianInput.ReadEnd();
string []arrData = new String[arrayList.Count];
abstractHessianInput.AddRef(arrData);
for (int i = 0; i < arrData.Length; i++)
arrData[i] = (string) arrayList[i];
return arrData;
}
}
case BOOLEAN_ARRAY:
{
if (intLength >= 0)
{
bool []arrData = new bool[intLength];
abstractHessianInput.AddRef(arrData);
for (int i = 0; i < arrData.Length; i++)
arrData[i] = abstractHessianInput.ReadBoolean();
abstractHessianInput.ReadEnd();
return arrData;
}
else
{
ArrayList arrayList = new ArrayList();
while (! abstractHessianInput.IsEnd())
arrayList.Add(abstractHessianInput.ReadBoolean());
abstractHessianInput.ReadEnd();
bool []arrData = new bool[arrayList.Count];
abstractHessianInput.AddRef(arrData);
for (int i = 0; i < arrData.Length; i++)
arrData[i] = (bool) arrayList[i];
return arrData;
}
}
case SHORT_ARRAY:
{
if (intLength >= 0)
{
short []arrData = new short[intLength];
abstractHessianInput.AddRef(arrData);
for (int i = 0; i < arrData.Length; i++)
arrData[i] = (short) abstractHessianInput.ReadInt();
abstractHessianInput.ReadEnd();
return arrData;
}
else
{
ArrayList arrayList = new ArrayList();
while (! abstractHessianInput.IsEnd())
arrayList.Add((short) abstractHessianInput.ReadInt());
abstractHessianInput.ReadEnd();
short []arrData = new short[arrayList.Count];
for (int i = 0; i < arrData.Length; i++)
arrData[i] = (short) arrayList[i];
abstractHessianInput.AddRef(arrData);
return arrData;
}
}
case LONG_ARRAY:
{
if (intLength >= 0)
{
long []arrData = new long[intLength];
abstractHessianInput.AddRef(arrData);
for (int i = 0; i < arrData.Length; i++)
arrData[i] = abstractHessianInput.ReadLong();
abstractHessianInput.ReadEnd();
return arrData;
}
else
{
ArrayList arrayList = new ArrayList();
while (! abstractHessianInput.IsEnd())
arrayList.Add(abstractHessianInput.ReadLong());
abstractHessianInput.ReadEnd();
long []arrData = new long[arrayList.Count];
for (int i = 0; i < arrData.Length; i++)
arrData[i] = (long) arrayList[i];
abstractHessianInput.AddRef(arrData);
return arrData;
}
}
case FLOAT_ARRAY:
{
if (intLength >= 0)
{
float []arrData = new float[intLength];
abstractHessianInput.AddRef(arrData);
for (int i = 0; i < arrData.Length; i++)
arrData[i] = (float)(abstractHessianInput.ReadDouble());
abstractHessianInput.ReadEnd();
return arrData;
}
else
{
ArrayList arrayList = new ArrayList();
while (! abstractHessianInput.IsEnd())
arrayList.Add(abstractHessianInput.ReadDouble());
abstractHessianInput.ReadEnd();
float []arrData = new float[arrayList.Count];
for (int i = 0; i < arrData.Length; i++)
arrData[i] = (float) arrayList[i];
abstractHessianInput.AddRef(arrData);
return arrData;
}
}
case DOUBLE_ARRAY:
{
if (intLength >= 0)
{
double []arrData = new double[intLength];
abstractHessianInput.AddRef(arrData);
for (int i = 0; i < arrData.Length; i++)
arrData[i] = abstractHessianInput.ReadDouble();
abstractHessianInput.ReadEnd();
return arrData;
}
else
{
ArrayList arrayList = new ArrayList();
while (! abstractHessianInput.IsEnd())
arrayList.Add(abstractHessianInput.ReadDouble());
abstractHessianInput.ReadEnd();
double []data = new double[arrayList.Count];
abstractHessianInput.AddRef(data);
for (int i = 0; i < data.Length; i++)
data[i] = (double) arrayList[i];
return data;
}
}
case OBJECT_ARRAY:
{
if (intLength >= 0)
{
object []arrData = new Object[intLength];
abstractHessianInput.AddRef(arrData);
for (int i = 0; i < arrData.Length; i++)
arrData[i] = abstractHessianInput.ReadObject();
abstractHessianInput.ReadEnd();
return arrData;
}
else
{
ArrayList arrayList = new ArrayList();
abstractHessianInput.AddRef(arrayList); // XXX: potential issues here
while (! abstractHessianInput.IsEnd())
arrayList.Add(abstractHessianInput.ReadObject());
abstractHessianInput.ReadEnd();
object []arrData = new Object[arrayList.Count];
for (int i = 0; i < arrData.Length; i++)
arrData[i] = arrayList[i];
return arrData;
}
}
default:
throw new CHessianException("not supperted type for deserialization");
}
}