Ejemplo n.º 1
0
        private SourceText DeserializeSourceText(ObjectReader reader, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            // REVIEW: why IDE services doesnt care about checksumAlgorithm?
            var checksumAlgorithm = (SourceHashAlgorithm)reader.ReadInt32();
            var encoding          = ReadEncodingFrom(reader, cancellationToken);

            var kind = (SerializationKinds)reader.ReadInt32();

            if (kind == SerializationKinds.MemoryMapFile)
            {
                var storage2 = (ITemporaryStorageService2)_storageService;

                var name   = reader.ReadString();
                var offset = reader.ReadInt64();
                var size   = reader.ReadInt64();

                var storage = storage2.AttachTemporaryTextStorage(name, offset, size, encoding, cancellationToken);

                return(storage.ReadText(cancellationToken));
            }

            Contract.ThrowIfFalse(kind == SerializationKinds.Bits);
            return(SourceTextExtensions.ReadFrom(_textService, reader, encoding, cancellationToken));
        }
Ejemplo n.º 2
0
        public void TestSourceTextSerialization()
        {
            var textService = new TextFactoryService();

            var maxSize = SourceTextExtensions.SourceTextLengthThreshold * 3;
            var sb      = new StringBuilder(0, maxSize);

            for (var i = 0; i < maxSize; i++)
            {
                var originalText = CreateSourceText(sb, i);

                using (var stream = SerializableBytes.CreateWritableStream())
                    using (var writer = new ObjectWriter(stream))
                    {
                        originalText.WriteTo(writer, CancellationToken.None);

                        stream.Position = 0;

                        using (var reader = ObjectReader.TryGetReader(stream))
                        {
                            var recovered = SourceTextExtensions.ReadFrom(textService, reader, originalText.Encoding, CancellationToken.None);

                            Assert.Equal(originalText.ToString(), recovered.ToString());
                        }
                    }
            }
        }
Ejemplo n.º 3
0
        private SerializableSourceText DeserializeSerializableSourceText(ObjectReader reader, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            var checksumAlgorithm = (SourceHashAlgorithm)reader.ReadInt32();
            var encoding          = (Encoding)reader.ReadValue();

            var kind = (SerializationKinds)reader.ReadInt32();

            if (kind == SerializationKinds.MemoryMapFile)
            {
                var storage2 = (ITemporaryStorageService2)_storageService;

                var name   = reader.ReadString();
                var offset = reader.ReadInt64();
                var size   = reader.ReadInt64();

                var storage = storage2.AttachTemporaryTextStorage(name, offset, size, checksumAlgorithm, encoding, cancellationToken);
                if (storage is ITemporaryTextStorageWithName storageWithName)
                {
                    return(new SerializableSourceText(storageWithName));
                }
                else
                {
                    return(new SerializableSourceText(storage.ReadText(cancellationToken)));
                }
            }

            Contract.ThrowIfFalse(kind == SerializationKinds.Bits);
            return(new SerializableSourceText(SourceTextExtensions.ReadFrom(_textService, reader, encoding, cancellationToken)));
        }