annotate pkg/mesh/loader.go @ 5676:d56e043bbbca sr-v2

More code moving.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sun, 11 Feb 2024 09:49:25 +0100
parents e54635c20d43
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1017
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
1 // This is Free Software under GNU Affero General Public License v >= 3.0
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
2 // without warranty, see README.md and license for details.
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
3 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
4 // SPDX-License-Identifier: AGPL-3.0-or-later
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
5 // License-Filename: LICENSES/AGPL-3.0.txt
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
6 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
7 // Copyright (C) 2018 by via donau
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
8 // – Österreichische Wasserstraßen-Gesellschaft mbH
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
9 // Software engineering by Intevation GmbH
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
10 //
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
11 // Author(s):
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de>
a244b18cb916 Added GNU Affero General Public License.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 729
diff changeset
13
4827
f4abfd0ee8ad Renamed octree package to mesh as there is no octree any more.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4824
diff changeset
14 package mesh
674
120a82bd9953 octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15
120a82bd9953 octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16 import (
120a82bd9953 octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
17 "bufio"
727
41c8dc61f38f Moved octree loading stuff to octree package.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 726
diff changeset
18 "bytes"
4656
a2f16987911b Removed lz4 from loader, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 4650
diff changeset
19 "compress/gzip"
674
120a82bd9953 octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20 "encoding/binary"
5674
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
21 "errors"
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
22 "fmt"
674
120a82bd9953 octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23 )
120a82bd9953 octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24
5674
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
25 const magicHeader = "SR3D"
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
26
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
27 // Bytes serializes this tree to a byte slice.
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
28 func (s *STRTree) Bytes() ([]byte, error) {
4650
f5fce22184da Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2465
diff changeset
29
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
30 var buf bytes.Buffer
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
31 w, err := gzip.NewWriterLevel(&buf, gzip.BestSpeed)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
32 if err != nil {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
33 return nil, err
4650
f5fce22184da Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2465
diff changeset
34 }
674
120a82bd9953 octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
35
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
36 if err := s.serializeV1(w); err != nil {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
37 return nil, err
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
38 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
39
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
40 if err := w.Close(); err != nil {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
41 return nil, err
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
42 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
43
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
44 return buf.Bytes(), nil
4650
f5fce22184da Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2465
diff changeset
45 }
f5fce22184da Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2465
diff changeset
46
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
47 // FromBytes restores a STRTree from a binary representation.
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
48 func (s *STRTree) FromBytes(data []byte, version *int64) error {
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
49 r, err := gzip.NewReader(bytes.NewReader(data))
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
50 if err != nil {
4650
f5fce22184da Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2465
diff changeset
51 return err
f5fce22184da Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2465
diff changeset
52 }
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
53 return s.deserialize(bufio.NewReader(r), version)
4650
f5fce22184da Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2465
diff changeset
54 }
f5fce22184da Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2465
diff changeset
55
5674
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
56 func (s *STRTree) deserialize(r *bufio.Reader, version *int64) error {
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
57
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
58 header, err := r.Peek(8)
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
59 if err != nil {
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
60 return err
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
61 }
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
62
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
63 if bytes.HasPrefix(header, []byte(magicHeader)) {
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
64 realVersion := int64(binary.LittleEndian.Uint32(header[4:]))
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
65 if version != nil && realVersion != *version {
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
66 return fmt.Errorf("sounding result version mismatch: Have %d expect %d",
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
67 realVersion, *version)
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
68 }
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
69 return s.deserializeVn(r, realVersion)
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
70 }
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
71
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
72 return s.deserializeV1(r)
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
73 }
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
74
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
75 func (s *STRTree) deserializeVn(r *bufio.Reader, version int64) error {
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
76 if version == 1 {
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
77 return s.deserializeV1(r)
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
78 }
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
79 // TODO: Implement me!
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
80 return errors.New("not implemented, yet")
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
81 }