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);
     }
 }