Mercurial > gemma
diff pkg/mesh/meshserialize.go @ 5695:ef80748ae4f3 sr-v2
Finish deserializing v2 of the mesh index.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 12 Feb 2024 21:23:55 +0100 |
parents | d920f0fa2f04 |
children | 1ea1d3ef2258 |
line wrap: on
line diff
--- a/pkg/mesh/meshserialize.go Mon Feb 12 14:43:31 2024 +0100 +++ b/pkg/mesh/meshserialize.go Mon Feb 12 21:23:55 2024 +0100 @@ -24,10 +24,13 @@ "gemma.intevation.de/gemma/pkg/log" ) -const Version = 1 +// Version is current version of the format the mesh index is stored in. +const Version = 2 +// magicHeader is a magic header to tell if the data blob is a mesh index. const magicHeader = "SR3D" +// coalesceVersion returns the most recent version if version is less or equal zero. func coalesceVersion(version int) int { if version > 0 { return version @@ -35,6 +38,8 @@ return Version } +// OptimizeForSerialization apply version specific storage optimizations +// before serialization. func (s *STRTree) OptimizeForSerialization(version int) { version = coalesceVersion(version) if version == 2 { @@ -44,22 +49,18 @@ // Bytes serializes this tree to a byte slice. func (s *STRTree) Bytes(version int) ([]byte, int, error) { - var buf bytes.Buffer w, err := gzip.NewWriterLevel(&buf, gzip.BestSpeed) if err != nil { return nil, 0, err } - version = coalesceVersion(version) if err := s.serializeVn(w, version); err != nil { return nil, 0, err } - if err := w.Close(); err != nil { return nil, 0, err } - return buf.Bytes(), version, nil } @@ -85,12 +86,10 @@ } func (s *STRTree) deserialize(r *bufio.Reader, version int) error { - header, err := r.Peek(8) if err != nil { return err } - if bytes.HasPrefix(header, []byte(magicHeader)) { realVersion := int(binary.LittleEndian.Uint32(header[4:])) if realVersion != version { @@ -103,7 +102,6 @@ } return s.deserializeVn(r, realVersion) } - return s.deserializeV1(r) } @@ -119,7 +117,7 @@ } // serializer is a generic function to apply a chain of -// serializer/deserializer functions to an object given a reader. +// serializer/deserializer functions to an object given a reader or writer. func serializer[T, S any]( s S, t T,