Mercurial > gemma
annotate pkg/mesh/meshserialize.go @ 5710:37c8feeecb4d
Merged branch sr-v2 into default.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 20 Feb 2024 21:28:56 +0100 |
parents | ef80748ae4f3 |
children | 1ea1d3ef2258 |
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 |
5695
ef80748ae4f3
Finish deserializing v2 of the mesh index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5692
diff
changeset
|
27 // Version is current version of the format the mesh index is stored in. |
ef80748ae4f3
Finish deserializing v2 of the mesh index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5692
diff
changeset
|
28 const Version = 2 |
5678
4abbb62d2bed
Write mesh version to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5677
diff
changeset
|
29 |
5695
ef80748ae4f3
Finish deserializing v2 of the mesh index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5692
diff
changeset
|
30 // magicHeader is a magic header to tell if the data blob is a mesh index. |
5674
e54635c20d43
Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5601
diff
changeset
|
31 const magicHeader = "SR3D" |
e54635c20d43
Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5601
diff
changeset
|
32 |
5695
ef80748ae4f3
Finish deserializing v2 of the mesh index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5692
diff
changeset
|
33 // coalesceVersion returns the most recent version if version is less or equal zero. |
5679
03dfbe675842
Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5678
diff
changeset
|
34 func coalesceVersion(version int) int { |
03dfbe675842
Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5678
diff
changeset
|
35 if version > 0 { |
03dfbe675842
Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5678
diff
changeset
|
36 return version |
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 return Version |
03dfbe675842
Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5678
diff
changeset
|
39 } |
03dfbe675842
Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5678
diff
changeset
|
40 |
5695
ef80748ae4f3
Finish deserializing v2 of the mesh index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5692
diff
changeset
|
41 // OptimizeForSerialization apply version specific storage optimizations |
ef80748ae4f3
Finish deserializing v2 of the mesh index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5692
diff
changeset
|
42 // before serialization. |
5679
03dfbe675842
Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5678
diff
changeset
|
43 func (s *STRTree) OptimizeForSerialization(version int) { |
03dfbe675842
Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5678
diff
changeset
|
44 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
|
45 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
|
46 s.optimizeForSerializationV2() |
a87900c0fd11
Remove triangles that are not registered in the spatial index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5679
diff
changeset
|
47 } |
5679
03dfbe675842
Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5678
diff
changeset
|
48 } |
03dfbe675842
Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5678
diff
changeset
|
49 |
5676
d56e043bbbca
More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5674
diff
changeset
|
50 // Bytes serializes this tree to a byte slice. |
5679
03dfbe675842
Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5678
diff
changeset
|
51 func (s *STRTree) Bytes(version int) ([]byte, int, error) { |
5676
d56e043bbbca
More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5674
diff
changeset
|
52 var buf bytes.Buffer |
d56e043bbbca
More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5674
diff
changeset
|
53 w, err := gzip.NewWriterLevel(&buf, gzip.BestSpeed) |
d56e043bbbca
More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5674
diff
changeset
|
54 if err != nil { |
5678
4abbb62d2bed
Write mesh version to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5677
diff
changeset
|
55 return nil, 0, err |
4650
f5fce22184da
Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2465
diff
changeset
|
56 } |
5679
03dfbe675842
Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5678
diff
changeset
|
57 version = coalesceVersion(version) |
03dfbe675842
Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5678
diff
changeset
|
58 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
|
59 return nil, 0, err |
5676
d56e043bbbca
More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5674
diff
changeset
|
60 } |
d56e043bbbca
More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5674
diff
changeset
|
61 if err := w.Close(); err != nil { |
5678
4abbb62d2bed
Write mesh version to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5677
diff
changeset
|
62 return nil, 0, err |
5676
d56e043bbbca
More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5674
diff
changeset
|
63 } |
5679
03dfbe675842
Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5678
diff
changeset
|
64 return buf.Bytes(), version, nil |
5678
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 |
4abbb62d2bed
Write mesh version to database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5677
diff
changeset
|
67 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
|
68 switch version { |
c33a5354328d
Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5680
diff
changeset
|
69 case 1: |
c33a5354328d
Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5680
diff
changeset
|
70 return s.serializeV1(w) |
c33a5354328d
Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5680
diff
changeset
|
71 case 2: |
c33a5354328d
Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5680
diff
changeset
|
72 return s.serializeV2(w) |
c33a5354328d
Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5680
diff
changeset
|
73 default: |
c33a5354328d
Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5680
diff
changeset
|
74 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
|
75 } |
4650
f5fce22184da
Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2465
diff
changeset
|
76 } |
f5fce22184da
Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2465
diff
changeset
|
77 |
5676
d56e043bbbca
More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5674
diff
changeset
|
78 // FromBytes restores a STRTree from a binary representation. |
5679
03dfbe675842
Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5678
diff
changeset
|
79 func (s *STRTree) FromBytes(data []byte, version int) error { |
03dfbe675842
Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5678
diff
changeset
|
80 version = coalesceVersion(version) |
5676
d56e043bbbca
More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5674
diff
changeset
|
81 r, err := gzip.NewReader(bytes.NewReader(data)) |
d56e043bbbca
More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5674
diff
changeset
|
82 if err != nil { |
4650
f5fce22184da
Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2465
diff
changeset
|
83 return err |
f5fce22184da
Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2465
diff
changeset
|
84 } |
5676
d56e043bbbca
More code moving.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5674
diff
changeset
|
85 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
|
86 } |
f5fce22184da
Added a deserializer from STRTrees.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
2465
diff
changeset
|
87 |
5679
03dfbe675842
Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5678
diff
changeset
|
88 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
|
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 if bytes.HasPrefix(header, []byte(magicHeader)) { |
5679
03dfbe675842
Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5678
diff
changeset
|
94 realVersion := int(binary.LittleEndian.Uint32(header[4:])) |
03dfbe675842
Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5678
diff
changeset
|
95 if realVersion != version { |
5686
c33a5354328d
Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5680
diff
changeset
|
96 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
|
97 realVersion, version) |
5674
e54635c20d43
Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5601
diff
changeset
|
98 } |
5687
8ff842858434
More stubs for serializing v2.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5686
diff
changeset
|
99 // Skip the header |
8ff842858434
More stubs for serializing v2.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5686
diff
changeset
|
100 if _, err := r.Discard(8); err != nil { |
8ff842858434
More stubs for serializing v2.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5686
diff
changeset
|
101 return err |
8ff842858434
More stubs for serializing v2.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5686
diff
changeset
|
102 } |
5674
e54635c20d43
Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5601
diff
changeset
|
103 return s.deserializeVn(r, realVersion) |
e54635c20d43
Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5601
diff
changeset
|
104 } |
e54635c20d43
Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5601
diff
changeset
|
105 return s.deserializeV1(r) |
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 |
5679
03dfbe675842
Simplified version handling.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5678
diff
changeset
|
108 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
|
109 switch version { |
c33a5354328d
Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5680
diff
changeset
|
110 case 1: |
5674
e54635c20d43
Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5601
diff
changeset
|
111 return s.deserializeV1(r) |
5686
c33a5354328d
Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5680
diff
changeset
|
112 case 2: |
c33a5354328d
Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5680
diff
changeset
|
113 return s.deserializeV2(r) |
c33a5354328d
Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5680
diff
changeset
|
114 default: |
c33a5354328d
Add stubs for de/serialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5680
diff
changeset
|
115 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
|
116 } |
e54635c20d43
Load version fom database.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5601
diff
changeset
|
117 } |
5690
da9720b4aa42
More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5687
diff
changeset
|
118 |
5692
d920f0fa2f04
User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5691
diff
changeset
|
119 // serializer is a generic function to apply a chain of |
5695
ef80748ae4f3
Finish deserializing v2 of the mesh index.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5692
diff
changeset
|
120 // serializer/deserializer functions to an object given a reader or writer. |
5692
d920f0fa2f04
User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5691
diff
changeset
|
121 func serializer[T, S any]( |
d920f0fa2f04
User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5691
diff
changeset
|
122 s S, |
5691
9d2e74225104
Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5690
diff
changeset
|
123 t T, |
5692
d920f0fa2f04
User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5691
diff
changeset
|
124 fns ...func(T, S) error, |
5691
9d2e74225104
Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5690
diff
changeset
|
125 ) error { |
9d2e74225104
Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5690
diff
changeset
|
126 for _, fn := range fns { |
5692
d920f0fa2f04
User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5691
diff
changeset
|
127 if err := fn(t, s); err != nil { |
5691
9d2e74225104
Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5690
diff
changeset
|
128 return err |
9d2e74225104
Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5690
diff
changeset
|
129 } |
9d2e74225104
Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5690
diff
changeset
|
130 } |
9d2e74225104
Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5690
diff
changeset
|
131 return nil |
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 |
5690
da9720b4aa42
More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5687
diff
changeset
|
134 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
|
135 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
|
136 } |
da9720b4aa42
More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5687
diff
changeset
|
137 |
da9720b4aa42
More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5687
diff
changeset
|
138 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
|
139 var numEntries uint8 |
da9720b4aa42
More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5687
diff
changeset
|
140 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
|
141 return err |
da9720b4aa42
More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5687
diff
changeset
|
142 } |
da9720b4aa42
More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5687
diff
changeset
|
143 s.Entries = int(numEntries) |
da9720b4aa42
More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5687
diff
changeset
|
144 return nil |
da9720b4aa42
More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5687
diff
changeset
|
145 } |
da9720b4aa42
More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5687
diff
changeset
|
146 |
da9720b4aa42
More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5687
diff
changeset
|
147 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
|
148 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
|
149 return err |
da9720b4aa42
More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5687
diff
changeset
|
150 } |
da9720b4aa42
More stubs and refactoring to deserialize v2 meshes.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5687
diff
changeset
|
151 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
|
152 } |
5691
9d2e74225104
Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5690
diff
changeset
|
153 |
9d2e74225104
Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5690
diff
changeset
|
154 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
|
155 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
|
156 return err |
9d2e74225104
Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5690
diff
changeset
|
157 } |
9d2e74225104
Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5690
diff
changeset
|
158 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
|
159 return err |
9d2e74225104
Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5690
diff
changeset
|
160 } |
9d2e74225104
Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5690
diff
changeset
|
161 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
|
162 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
|
163 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
|
164 return nil |
9d2e74225104
Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5690
diff
changeset
|
165 } |
9d2e74225104
Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5690
diff
changeset
|
166 |
9d2e74225104
Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5690
diff
changeset
|
167 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
|
168 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
|
169 } |
9d2e74225104
Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5690
diff
changeset
|
170 |
9d2e74225104
Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5690
diff
changeset
|
171 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
|
172 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
|
173 return err |
9d2e74225104
Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5690
diff
changeset
|
174 } |
9d2e74225104
Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5690
diff
changeset
|
175 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
|
176 return nil |
9d2e74225104
Some refactoring to clean up deserialization.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5690
diff
changeset
|
177 } |
5692
d920f0fa2f04
User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5691
diff
changeset
|
178 |
d920f0fa2f04
User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5691
diff
changeset
|
179 func serializeHeader() func(*STRTree, io.Writer) error { |
d920f0fa2f04
User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5691
diff
changeset
|
180 return func(_ *STRTree, w io.Writer) error { |
d920f0fa2f04
User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5691
diff
changeset
|
181 _, err := w.Write([]byte(magicHeader)) |
d920f0fa2f04
User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5691
diff
changeset
|
182 return err |
d920f0fa2f04
User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5691
diff
changeset
|
183 } |
d920f0fa2f04
User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5691
diff
changeset
|
184 } |
d920f0fa2f04
User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5691
diff
changeset
|
185 |
d920f0fa2f04
User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5691
diff
changeset
|
186 func serializeVersion(version int) func(*STRTree, io.Writer) error { |
d920f0fa2f04
User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5691
diff
changeset
|
187 return func(_ *STRTree, w io.Writer) error { |
d920f0fa2f04
User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5691
diff
changeset
|
188 return binary.Write(w, binary.LittleEndian, uint32(version)) |
d920f0fa2f04
User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5691
diff
changeset
|
189 } |
d920f0fa2f04
User generic serializer for serialization, too.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
5691
diff
changeset
|
190 } |