private void loadObjectDescriptors(System.IO.Stream stream, SmalltalkArchive archive) { long objectId = 0; var objects = DefaultObjects; while ((objectId = readInteger(stream)) != NUL) { var classId = readInteger(stream); var size = (int)readInteger(stream); var @class = archive.Classes[classId]; var hash = readInteger(stream); if (@class.IsBytes) { var bytes = new byte[size]; stream.Read(bytes, 0, size); var obj = new SmalltalkBytesObject(objectId, size, hash, @class, bytes); objects.Add(objectId, obj); } else if (@class.IsVariable) { var obj = new SmalltalkVariableObject(objectId, size, hash, @class); loadInstVarIds(stream, archive, obj, size); objects.Add(objectId, obj); } else { var obj = new SmalltalkPointerObject(objectId, size, hash, @class); loadInstVarIds(stream, archive, obj, size); objects.Add(objectId, obj); } } archive.Objects = objects; }
public void Export(SmalltalkBytesObject obj, XElement xmlObject) { if (obj.Class.ClassName == SmalltalkClass.StringClassName) { xmlObject.Add(obj.AsciiValue); } else if (obj.Class.ClassName == SmalltalkClass.SymbolClassName) { xmlObject.Add(obj.AsciiValue); } else if (obj.Class.ClassName == SmalltalkClass.GuidClassName) { xmlObject.Add(obj.GuidValue); } else if (obj.Class.ClassName == SmalltalkClass.FloatClassName) { xmlObject.Add(obj.DoubleValue); } else { xmlObject.Add(obj.Bytes); } }