Mercurial > gemma
comparison pkg/mesh/meshserialize.go @ 5678:4abbb62d2bed sr-v2
Write mesh version to database.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Sun, 11 Feb 2024 10:25:50 +0100 |
parents | a57be8bfb6ea |
children | 03dfbe675842 |
comparison
equal
deleted
inserted
replaced
5677:a57be8bfb6ea | 5678:4abbb62d2bed |
---|---|
18 "bytes" | 18 "bytes" |
19 "compress/gzip" | 19 "compress/gzip" |
20 "encoding/binary" | 20 "encoding/binary" |
21 "errors" | 21 "errors" |
22 "fmt" | 22 "fmt" |
23 "io" | |
23 ) | 24 ) |
25 | |
26 const Version = 1 | |
24 | 27 |
25 const magicHeader = "SR3D" | 28 const magicHeader = "SR3D" |
26 | 29 |
27 // Bytes serializes this tree to a byte slice. | 30 // Bytes serializes this tree to a byte slice. |
28 func (s *STRTree) Bytes() ([]byte, error) { | 31 func (s *STRTree) Bytes(version *int) ([]byte, int, error) { |
29 | 32 |
30 var buf bytes.Buffer | 33 var buf bytes.Buffer |
31 w, err := gzip.NewWriterLevel(&buf, gzip.BestSpeed) | 34 w, err := gzip.NewWriterLevel(&buf, gzip.BestSpeed) |
32 if err != nil { | 35 if err != nil { |
33 return nil, err | 36 return nil, 0, err |
34 } | 37 } |
35 | 38 |
36 if err := s.serializeV1(w); err != nil { | 39 var ver int |
37 return nil, err | 40 |
41 if version == nil || *version < 0 { | |
42 ver = Version | |
43 } | |
44 | |
45 if err := s.serializeVn(w, ver); err != nil { | |
46 return nil, 0, err | |
38 } | 47 } |
39 | 48 |
40 if err := w.Close(); err != nil { | 49 if err := w.Close(); err != nil { |
41 return nil, err | 50 return nil, 0, err |
42 } | 51 } |
43 | 52 |
44 return buf.Bytes(), nil | 53 return buf.Bytes(), ver, nil |
54 } | |
55 | |
56 func (s *STRTree) serializeVn(w io.Writer, version int) error { | |
57 | |
58 if version > Version { | |
59 return fmt.Errorf( | |
60 "cannot serialize mesh version %d. Highest supported version %d", | |
61 version, Version) | |
62 } | |
63 | |
64 return s.serializeV1(w) | |
45 } | 65 } |
46 | 66 |
47 // FromBytes restores a STRTree from a binary representation. | 67 // FromBytes restores a STRTree from a binary representation. |
48 func (s *STRTree) FromBytes(data []byte, version *int64) error { | 68 func (s *STRTree) FromBytes(data []byte, version *int64) error { |
69 | |
70 if version != nil && *version > Version { | |
71 return fmt.Errorf( | |
72 "cannot deserialize mesh version %d. Highest supported version %d", | |
73 *version, Version) | |
74 } | |
75 | |
49 r, err := gzip.NewReader(bytes.NewReader(data)) | 76 r, err := gzip.NewReader(bytes.NewReader(data)) |
50 if err != nil { | 77 if err != nil { |
51 return err | 78 return err |
52 } | 79 } |
53 return s.deserialize(bufio.NewReader(r), version) | 80 return s.deserialize(bufio.NewReader(r), version) |