Example #1
0
        public void Read(Stream data)
        {
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }
            var reader = new UnityReader(data);

            Header = new DatabaseHeader(reader);

            byte[] buffer       = reader.ReadBytes(Header.CompressedSize);
            byte[] uncompressed = LZ4Codec.Decode(buffer, 0, buffer.Length, Header.UncompressedSize);
            using (var ms = new MemoryStream(uncompressed))
            {
                UnityReader lz4Reader  = new UnityReader(ms);
                int         classCount = lz4Reader.ReadInt32();
                Classes = new TypeClass[classCount];
                for (int i = 0; i < classCount; i++)
                {
                    Classes[i] = new TypeClass(lz4Reader, this);
                }
                lz4Reader.Position = Header.StringTablePosition;
                _stringTable       = lz4Reader.ReadStringFixed(Header.StringTableLength, Encoding.ASCII);
            }
        }
Example #2
0
        public void WriteAndReadHeader()
        {
            using MemoryFileSystemService service = new MemoryFileSystemService(new DatatentSettings(), Constants.DATABASE_HEADER_SIZE * 5, new NullLogger <FileSystemServiceBase>());

            DatabaseHeader expected = new DatabaseHeader(1, new DataProcessingInformations(Guid.NewGuid(), Guid.NewGuid()));

            service.WriteDatabaseHeader(ref expected);

            DatabaseHeader result = service.ReadDatabaseHeader();

            result.Identifier.Should().Be(result.Identifier);
            result.Version.Should().Be(result.Version);
            result.DataProcessingInformations.CompressionServiceId.Should().NotBeEmpty();
        }
Example #3
0
        private void Initialize()
        {
            Header = DatabaseHeader.Parse(_reader);

            // Database Size in pages adjustment
            // https://www.sqlite.org/fileformat.html#in_header_database_size

            uint expectedPages = (uint)(_reader.Length / Header.PageSize);

            // TODO: Warn on mismatch
            _sizeInPages = Math.Max(expectedPages, Header.DatabaseSizeInPages);

            _reader.ApplySqliteDatabaseHeader(Header);
        }
        internal void ApplySqliteDatabaseHeader(DatabaseHeader header)
        {
            PageSize      = header.PageSize;
            ReservedSpace = header.ReservedSpaceAtEndOfPage;
            TextEncoding  = header.TextEncoding;

            switch (TextEncoding)
            {
            case SqliteEncoding.UTF8:
                _encoding = Encoding.UTF8;
                break;

            case SqliteEncoding.UTF16LE:
                _encoding = Encoding.Unicode;
                break;

            case SqliteEncoding.UTF16BE:
                _encoding = Encoding.BigEndianUnicode;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Example #5
0
        private void InitNew()
        {
            var header = new DatabaseHeader(Constants.VERSION, _processingPipeline.GetInformations());

            _fileSystemService.WriteDatabaseHeader(ref header);
        }