annotate pkg/mesh/meshserialize.go @ 5691:9d2e74225104 sr-v2

Some refactoring to clean up deserialization.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 12 Feb 2024 12:48:07 +0100
parents da9720b4aa42
children d920f0fa2f04
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 "fmt"
5678
4abbb62d2bed Write mesh version to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5677
diff changeset
22 "io"
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
23
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
24 "gemma.intevation.de/gemma/pkg/log"
674
120a82bd9953 octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25 )
120a82bd9953 octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26
5678
4abbb62d2bed Write mesh version to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5677
diff changeset
27 const Version = 1
4abbb62d2bed Write mesh version to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5677
diff changeset
28
5674
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
29 const magicHeader = "SR3D"
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
30
5679
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
31 func coalesceVersion(version int) int {
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
32 if version > 0 {
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
33 return version
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
34 }
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
35 return Version
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
36 }
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
37
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
38 func (s *STRTree) OptimizeForSerialization(version int) {
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
39 version = coalesceVersion(version)
5680
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5679
diff changeset
40 if version == 2 {
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5679
diff changeset
41 s.optimizeForSerializationV2()
a87900c0fd11 Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5679
diff changeset
42 }
5679
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
43 }
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
44
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
45 // Bytes serializes this tree to a byte slice.
5679
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
46 func (s *STRTree) Bytes(version int) ([]byte, int, error) {
4650
f5fce22184da Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2465
diff changeset
47
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
48 var buf bytes.Buffer
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
49 w, err := gzip.NewWriterLevel(&buf, gzip.BestSpeed)
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
50 if err != nil {
5678
4abbb62d2bed Write mesh version to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5677
diff changeset
51 return nil, 0, err
4650
f5fce22184da Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2465
diff changeset
52 }
674
120a82bd9953 octree: Added loading frame for contour generation.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
53
5679
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
54 version = coalesceVersion(version)
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
55 if err := s.serializeVn(w, version); err != nil {
5678
4abbb62d2bed Write mesh version to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5677
diff changeset
56 return nil, 0, err
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
57 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
58
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
59 if err := w.Close(); err != nil {
5678
4abbb62d2bed Write mesh version to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5677
diff changeset
60 return nil, 0, err
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
61 }
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
62
5679
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
63 return buf.Bytes(), version, nil
5678
4abbb62d2bed Write mesh version to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5677
diff changeset
64 }
4abbb62d2bed Write mesh version to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5677
diff changeset
65
4abbb62d2bed Write mesh version to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5677
diff changeset
66 func (s *STRTree) serializeVn(w io.Writer, version int) error {
5686
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
67 switch version {
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
68 case 1:
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
69 return s.serializeV1(w)
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
70 case 2:
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
71 return s.serializeV2(w)
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
72 default:
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
73 return fmt.Errorf("cannot serialize mesh version %d", version)
5678
4abbb62d2bed Write mesh version to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5677
diff changeset
74 }
4650
f5fce22184da Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2465
diff changeset
75 }
f5fce22184da Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2465
diff changeset
76
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
77 // FromBytes restores a STRTree from a binary representation.
5679
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
78 func (s *STRTree) FromBytes(data []byte, version int) error {
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
79 version = coalesceVersion(version)
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
80 r, err := gzip.NewReader(bytes.NewReader(data))
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
81 if err != nil {
4650
f5fce22184da Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2465
diff changeset
82 return err
f5fce22184da Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2465
diff changeset
83 }
5676
d56e043bbbca More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5674
diff changeset
84 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
85 }
f5fce22184da Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 2465
diff changeset
86
5679
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
87 func (s *STRTree) deserialize(r *bufio.Reader, version int) error {
5674
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
88
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
89 header, err := r.Peek(8)
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
90 if err != nil {
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
91 return err
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
92 }
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
93
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
94 if bytes.HasPrefix(header, []byte(magicHeader)) {
5679
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
95 realVersion := int(binary.LittleEndian.Uint32(header[4:]))
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
96 if realVersion != version {
5686
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
97 return fmt.Errorf("mesh version mismatch: Have %d expect %d",
5679
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
98 realVersion, version)
5674
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
99 }
5687
8ff842858434 More stubs for serializing v2.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5686
diff changeset
100 // Skip the header
8ff842858434 More stubs for serializing v2.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5686
diff changeset
101 if _, err := r.Discard(8); err != nil {
8ff842858434 More stubs for serializing v2.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5686
diff changeset
102 return err
8ff842858434 More stubs for serializing v2.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5686
diff changeset
103 }
5674
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
104 return s.deserializeVn(r, realVersion)
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
105 }
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
106
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
107 return s.deserializeV1(r)
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
108 }
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
109
5679
03dfbe675842 Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5678
diff changeset
110 func (s *STRTree) deserializeVn(r *bufio.Reader, version int) error {
5686
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
111 switch version {
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
112 case 1:
5674
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
113 return s.deserializeV1(r)
5686
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
114 case 2:
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
115 return s.deserializeV2(r)
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
116 default:
c33a5354328d Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5680
diff changeset
117 return fmt.Errorf("cannot deserialize mesh version %d", version)
5674
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
118 }
e54635c20d43 Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5601
diff changeset
119 }
5690
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
120
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
121 // deserializer is a generic function to apply a chain of
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
122 // deserializer function to an object given a reader.
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
123 func deserializer[T any](
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
124 r *bufio.Reader,
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
125 t T,
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
126 fns ...func(T, *bufio.Reader) error,
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
127 ) error {
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
128 for _, fn := range fns {
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
129 if err := fn(t, r); err != nil {
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
130 return err
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
131 }
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
132 }
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
133 return nil
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
134 }
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
135
5690
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
136 func (s *STRTree) serializeEntries(w io.Writer) error {
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
137 return binary.Write(w, binary.LittleEndian, uint8(s.Entries))
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
138 }
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
139
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
140 func (s *STRTree) deserializeEntries(r *bufio.Reader) error {
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
141 var numEntries uint8
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
142 if err := binary.Read(r, binary.LittleEndian, &numEntries); err != nil {
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
143 return err
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
144 }
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
145 s.Entries = int(numEntries)
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
146 return nil
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
147 }
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
148
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
149 func (t *Tin) serializeExtent(w io.Writer) error {
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
150 if err := t.Min.Write(w); err != nil {
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
151 return err
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
152 }
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
153 return t.Max.Write(w)
da9720b4aa42 More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5687
diff changeset
154 }
5691
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
155
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
156 func (t *Tin) deserializeExtent(r *bufio.Reader) error {
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
157 if err := t.Min.Read(r); err != nil {
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
158 return err
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
159 }
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
160 if err := t.Max.Read(r); err != nil {
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
161 return err
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
162 }
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
163 log.Infof("BBOX: [[%f, %f, %f], [%f, %f, %f]]\n",
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
164 t.Min.X, t.Min.Y, t.Min.Z,
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
165 t.Max.X, t.Max.Y, t.Max.Z)
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
166 return nil
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
167 }
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
168
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
169 func (t *Tin) serializeEPSG(w io.Writer) error {
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
170 return binary.Write(w, binary.LittleEndian, t.EPSG)
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
171 }
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
172
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
173 func (t *Tin) deserializeEPSG(r *bufio.Reader) error {
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
174 if err := binary.Read(r, binary.LittleEndian, &t.EPSG); err != nil {
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
175 return err
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
176 }
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
177 log.Infof("EPSG: %d\n", t.EPSG)
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
178 return nil
9d2e74225104 Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 5690
diff changeset
179 }