Mercurial > gemma
comparison pkg/mesh/meshserialize.go @ 5686:c33a5354328d sr-v2
Add stubs for de/serialize v2 meshes.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 12 Feb 2024 01:17:22 +0100 |
parents | a87900c0fd11 |
children | 8ff842858434 |
comparison
equal
deleted
inserted
replaced
5685:0ee8ace01b60 | 5686:c33a5354328d |
---|---|
16 import ( | 16 import ( |
17 "bufio" | 17 "bufio" |
18 "bytes" | 18 "bytes" |
19 "compress/gzip" | 19 "compress/gzip" |
20 "encoding/binary" | 20 "encoding/binary" |
21 "errors" | |
22 "fmt" | 21 "fmt" |
23 "io" | 22 "io" |
24 ) | 23 ) |
25 | 24 |
26 const Version = 1 | 25 const Version = 1 |
49 if err != nil { | 48 if err != nil { |
50 return nil, 0, err | 49 return nil, 0, err |
51 } | 50 } |
52 | 51 |
53 version = coalesceVersion(version) | 52 version = coalesceVersion(version) |
54 | |
55 if err := s.serializeVn(w, version); err != nil { | 53 if err := s.serializeVn(w, version); err != nil { |
56 return nil, 0, err | 54 return nil, 0, err |
57 } | 55 } |
58 | 56 |
59 if err := w.Close(); err != nil { | 57 if err := w.Close(); err != nil { |
62 | 60 |
63 return buf.Bytes(), version, nil | 61 return buf.Bytes(), version, nil |
64 } | 62 } |
65 | 63 |
66 func (s *STRTree) serializeVn(w io.Writer, version int) error { | 64 func (s *STRTree) serializeVn(w io.Writer, version int) error { |
67 | 65 switch version { |
68 if version > Version { | 66 case 1: |
69 return fmt.Errorf( | 67 return s.serializeV1(w) |
70 "cannot serialize mesh version %d. Highest supported version %d", | 68 case 2: |
71 version, Version) | 69 return s.serializeV2(w) |
70 default: | |
71 return fmt.Errorf("cannot serialize mesh version %d", version) | |
72 } | 72 } |
73 | |
74 return s.serializeV1(w) | |
75 } | 73 } |
76 | 74 |
77 // FromBytes restores a STRTree from a binary representation. | 75 // FromBytes restores a STRTree from a binary representation. |
78 func (s *STRTree) FromBytes(data []byte, version int) error { | 76 func (s *STRTree) FromBytes(data []byte, version int) error { |
79 | |
80 version = coalesceVersion(version) | 77 version = coalesceVersion(version) |
81 | |
82 if version > Version { | |
83 return fmt.Errorf( | |
84 "cannot deserialize mesh version %d. Highest supported version %d", | |
85 version, Version) | |
86 } | |
87 | |
88 r, err := gzip.NewReader(bytes.NewReader(data)) | 78 r, err := gzip.NewReader(bytes.NewReader(data)) |
89 if err != nil { | 79 if err != nil { |
90 return err | 80 return err |
91 } | 81 } |
92 return s.deserialize(bufio.NewReader(r), version) | 82 return s.deserialize(bufio.NewReader(r), version) |
100 } | 90 } |
101 | 91 |
102 if bytes.HasPrefix(header, []byte(magicHeader)) { | 92 if bytes.HasPrefix(header, []byte(magicHeader)) { |
103 realVersion := int(binary.LittleEndian.Uint32(header[4:])) | 93 realVersion := int(binary.LittleEndian.Uint32(header[4:])) |
104 if realVersion != version { | 94 if realVersion != version { |
105 return fmt.Errorf("sounding result version mismatch: Have %d expect %d", | 95 return fmt.Errorf("mesh version mismatch: Have %d expect %d", |
106 realVersion, version) | 96 realVersion, version) |
107 } | 97 } |
108 return s.deserializeVn(r, realVersion) | 98 return s.deserializeVn(r, realVersion) |
109 } | 99 } |
110 | 100 |
111 return s.deserializeV1(r) | 101 return s.deserializeV1(r) |
112 } | 102 } |
113 | 103 |
114 func (s *STRTree) deserializeVn(r *bufio.Reader, version int) error { | 104 func (s *STRTree) deserializeVn(r *bufio.Reader, version int) error { |
115 if version == 1 { | 105 switch version { |
106 case 1: | |
116 return s.deserializeV1(r) | 107 return s.deserializeV1(r) |
108 case 2: | |
109 return s.deserializeV2(r) | |
110 default: | |
111 return fmt.Errorf("cannot deserialize mesh version %d", version) | |
117 } | 112 } |
118 // TODO: Implement me! | |
119 return errors.New("not implemented, yet") | |
120 } | 113 } |