byte[] CreateByteArrayFromLiteralCollection(IType type, ExpressionCollection items)
{
using (MemoryStream ms = new MemoryStream(items.Count * TypeSystemServices.SizeOf(type)))
{
using (BinaryWriter writer = new BinaryWriter(ms))
{
foreach (Expression item in items)
{
//TODO: BOO-1222 NumericLiteralExpression.GetValueAs<T>()
if (item.NodeType == NodeType.IntegerLiteralExpression)
{
IntegerLiteralExpression literal = (IntegerLiteralExpression) item;
if (type == TypeSystemServices.IntType)
writer.Write(Convert.ToInt32(literal.Value));
else if (type == TypeSystemServices.UIntType)
writer.Write(Convert.ToUInt32(literal.Value));
else if (IsLong(type))
writer.Write(Convert.ToInt64(literal.Value));
else if (type == TypeSystemServices.ULongType)
writer.Write(Convert.ToUInt64(literal.Value));
else if (type == TypeSystemServices.ShortType)
writer.Write(Convert.ToInt16(literal.Value));
else if (type == TypeSystemServices.UShortType)
writer.Write(Convert.ToUInt16(literal.Value));
else if (type == TypeSystemServices.ByteType)
writer.Write(Convert.ToByte(literal.Value));
else if (type == TypeSystemServices.SByteType)
writer.Write(Convert.ToSByte(literal.Value));
else if (type == TypeSystemServices.SingleType)
writer.Write(Convert.ToSingle(literal.Value));
else if (type == TypeSystemServices.DoubleType)
writer.Write(Convert.ToDouble(literal.Value));
else
return null;
}
else if (item.NodeType == NodeType.DoubleLiteralExpression)
{
DoubleLiteralExpression literal = (DoubleLiteralExpression) item;
if (type == TypeSystemServices.SingleType)
writer.Write(Convert.ToSingle(literal.Value));
else if (type == TypeSystemServices.DoubleType)
writer.Write(Convert.ToDouble(literal.Value));
else if (type == TypeSystemServices.IntType)
writer.Write(Convert.ToInt32(literal.Value));
else if (type == TypeSystemServices.UIntType)
writer.Write(Convert.ToUInt32(literal.Value));
else if (IsLong(type))
writer.Write(Convert.ToInt64(literal.Value));
else if (type == TypeSystemServices.ULongType)
writer.Write(Convert.ToUInt64(literal.Value));
else if (type == TypeSystemServices.ShortType)
writer.Write(Convert.ToInt16(literal.Value));
else if (type == TypeSystemServices.UShortType)
writer.Write(Convert.ToUInt16(literal.Value));
else if (type == TypeSystemServices.ByteType)
writer.Write(Convert.ToByte(literal.Value));
else if (type == TypeSystemServices.SByteType)
writer.Write(Convert.ToSByte(literal.Value));
else
return null;
}
else
return null;
}
}
return ms.ToArray();
}
}