libosmscout
1.1.1
Toggle main menu visibility
Loading...
Searching...
No Matches
libosmscout
include
osmscout
Route.h
Go to the documentation of this file.
1
#ifndef OSMSCOUT_ROUTE_OBJ_H
2
#define OSMSCOUT_ROUTE_OBJ_H
3
4
/*
5
This source is part of the libosmscout library
6
Copyright (C) 2020 Lukáš Karas
7
8
This library is free software; you can redistribute it and/or
9
modify it under the terms of the GNU Lesser General Public
10
License as published by the Free Software Foundation; either
11
version 2.1 of the License, or (at your option) any later version.
12
13
This library is distributed in the hope that it will be useful,
14
but WITHOUT ANY WARRANTY; without even the implied warranty of
15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
Lesser General Public License for more details.
17
18
You should have received a copy of the GNU Lesser General Public
19
License along with this library; if not, write to the Free Software
20
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
*/
22
23
#include <memory>
24
#include <unordered_map>
25
#include <mutex>
26
27
#include <
osmscout/TypeConfig.h
>
28
#include <
osmscout/Way.h
>
29
30
#include <
osmscout/io/FileScanner.h
>
31
#include <
osmscout/io/FileWriter.h
>
32
33
#include <
osmscout/util/GeoBox.h
>
34
#include <
osmscout/util/Geometry.h
>
35
36
#include <
osmscout/system/Compiler.h
>
37
38
namespace
osmscout
{
39
49
class
OSMSCOUT_API
Route
CLASS_FINAL
50
{
51
public
:
52
enum class
MemberDirection
{
53
forward,
54
backward
55
};
56
57
struct
SegmentMember
{
58
MemberDirection
direction
{
MemberDirection::forward
};
59
FileOffset
way
;
60
};
61
62
struct
Segment
{
63
std::vector<SegmentMember>
members
;
64
};
65
66
using
MemberCache
=std::unordered_map<FileOffset,WayRef> ;
67
68
std::vector<Segment>
segments
;
69
GeoBox
bbox
;
70
71
private
:
72
mutable
std::mutex cacheMutex;
73
MemberCache
resolvedMembers;
74
75
FeatureValueBuffer
featureValueBuffer;
76
77
FileOffset
fileOffset=0;
78
FileOffset
nextFileOffset=0;
79
80
public
:
81
Route
() =
default
;
82
83
FileOffset
GetFileOffset
()
const
84
{
85
return
fileOffset;
86
}
87
88
FileOffset
GetNextFileOffset
()
const
89
{
90
return
nextFileOffset;
91
}
92
93
std::vector<FileOffset>
GetMemberOffsets
()
const
;
94
95
bool
HasResolvedMembers
()
const
96
{
97
std::lock_guard<std::mutex> lock(cacheMutex);
98
return
!resolvedMembers.empty();
99
}
100
101
void
SetResolvedMembers
(
const
MemberCache
&map)
102
{
103
std::lock_guard<std::mutex> lock(cacheMutex);
104
this->resolvedMembers=map;
105
}
106
107
MemberCache
GetResolvedMembers
()
const
108
{
109
std::lock_guard<std::mutex> lock(cacheMutex);
110
return
resolvedMembers;
111
}
112
113
// ObjectFileRef GetObjectFileRef() const
114
// {
115
// return {fileOffset,refRoute};
116
// }
117
118
GeoBox
GetBoundingBox
()
const
119
{
120
return
bbox
;
121
}
122
123
TypeInfoRef
GetType
()
const
124
{
125
return
featureValueBuffer.GetType();
126
}
127
128
size_t
GetFeatureCount
()
const
129
{
130
return
featureValueBuffer.GetType()->GetFeatureCount();
131
}
132
133
bool
HasFeature
(
size_t
idx)
const
134
{
135
return
featureValueBuffer.HasFeature(idx);
136
}
137
138
const
FeatureInstance
&
GetFeature
(
size_t
idx)
const
139
{
140
return
featureValueBuffer.GetType()->GetFeature(idx);
141
}
142
143
FeatureValue
*
GetFeatureValue
(
size_t
idx)
const
144
{
145
return
featureValueBuffer.GetValue(idx);
146
}
147
148
void
UnsetFeature
(
size_t
idx)
149
{
150
featureValueBuffer.FreeValue(idx);
151
}
152
153
const
FeatureValueBuffer
&
GetFeatureValueBuffer
()
const
154
{
155
return
featureValueBuffer;
156
}
157
158
void
SetType
(
const
TypeInfoRef
&
type
)
159
{
160
featureValueBuffer.SetType(
type
);
161
}
162
163
void
SetFeatures
(
const
FeatureValueBuffer
&
buffer
)
164
{
165
featureValueBuffer.Set(
buffer
);
166
}
167
168
void
Read
(
const
TypeConfig
& typeConfig,
169
FileScanner
& scanner);
170
171
void
Write
(
const
TypeConfig
& typeConfig,
172
FileWriter
& writer)
const
;
173
};
174
175
using
RouteRef
= std::shared_ptr<Route>;
176
}
177
178
#endif
179
Compiler.h
OSMSCOUT_API
#define OSMSCOUT_API
Definition
CoreImportExport.h:45
FileScanner.h
FileWriter.h
GeoBox.h
Geometry.h
TypeConfig.h
Way.h
osmscout::CLASS_FINAL
Definition
Area.h:88
osmscout::CLASS_FINAL::Route
Route()=default
osmscout::CLASS_FINAL::UnsetFeature
void UnsetFeature(size_t idx)
Definition
Route.h:148
osmscout::CLASS_FINAL::GetType
TypeInfoRef GetType() const
Definition
Route.h:123
osmscout::CLASS_FINAL::TypeConfig
TypeConfig()
osmscout::CLASS_FINAL::MemberCache
std::unordered_map< FileOffset, WayRef > MemberCache
Definition
Route.h:66
osmscout::CLASS_FINAL::Write
void Write(const TypeConfig &typeConfig, FileWriter &writer) const
osmscout::CLASS_FINAL::GetBoundingBox
GeoBox GetBoundingBox() const
Definition
Route.h:118
osmscout::CLASS_FINAL::GetFileOffset
FileOffset GetFileOffset() const
Definition
Route.h:83
osmscout::CLASS_FINAL::HasFeature
bool HasFeature(size_t idx) const
Definition
Route.h:133
osmscout::CLASS_FINAL::GeoBox
GeoBox()=default
osmscout::CLASS_FINAL::GetFeatureValue
FeatureValue * GetFeatureValue(size_t idx) const
Definition
Route.h:143
osmscout::CLASS_FINAL::GetNextFileOffset
FileOffset GetNextFileOffset() const
Definition
Route.h:88
osmscout::CLASS_FINAL::MemberDirection
MemberDirection
Definition
Route.h:52
osmscout::CLASS_FINAL::MemberDirection::forward
@ forward
Definition
Route.h:53
osmscout::CLASS_FINAL::SetResolvedMembers
void SetResolvedMembers(const MemberCache &map)
Definition
Route.h:101
osmscout::CLASS_FINAL::FeatureInstance
FeatureInstance()
osmscout::CLASS_FINAL::SetFeatures
void SetFeatures(const FeatureValueBuffer &buffer)
Definition
Route.h:163
osmscout::CLASS_FINAL::HasResolvedMembers
bool HasResolvedMembers() const
Definition
Route.h:95
osmscout::CLASS_FINAL::FileScanner
FileScanner()=default
osmscout::CLASS_FINAL::segments
std::vector< Segment > segments
Definition
Route.h:68
osmscout::CLASS_FINAL::FileWriter
FileWriter()=default
osmscout::CLASS_FINAL::GetMemberOffsets
std::vector< FileOffset > GetMemberOffsets() const
osmscout::CLASS_FINAL::GetFeatureValueBuffer
const FeatureValueBuffer & GetFeatureValueBuffer() const
Definition
Route.h:153
osmscout::CLASS_FINAL::GetResolvedMembers
MemberCache GetResolvedMembers() const
Definition
Route.h:107
osmscout::CLASS_FINAL::type
Type type
The type of the cell.
Definition
GroundTile.h:92
osmscout::CLASS_FINAL::SetType
void SetType(const TypeInfoRef &type)
Definition
Route.h:158
osmscout::CLASS_FINAL::buffer
Vertex2D * buffer
Definition
Transformation.h:343
osmscout::CLASS_FINAL::FeatureValueBuffer
FeatureValueBuffer()=default
osmscout::CLASS_FINAL::bbox
GeoBox bbox
Precomputed (cache) bounding box.
Definition
DataAgent.h:53
osmscout::CLASS_FINAL::GetFeature
const FeatureInstance & GetFeature(size_t idx) const
Definition
Route.h:138
osmscout::CLASS_FINAL::Read
void Read(const TypeConfig &typeConfig, FileScanner &scanner)
osmscout::CLASS_FINAL::GetFeatureCount
size_t GetFeatureCount() const
Definition
Route.h:128
osmscout::FeatureValue
Definition
TypeFeature.h:41
osmscout::FileOffset
uint64_t FileOffset
Definition
OSMScoutTypes.h:46
osmscout
Definition
Area.h:39
osmscout::RouteRef
std::shared_ptr< Route > RouteRef
Definition
Route.h:175
osmscout::TypeInfoRef
std::shared_ptr< TypeInfo > TypeInfoRef
Definition
TypeConfig.h:61
osmscout::CLASS_FINAL::Segment
Definition
Route.h:62
osmscout::CLASS_FINAL::Segment::members
std::vector< SegmentMember > members
Definition
Route.h:63
osmscout::CLASS_FINAL::SegmentMember
Definition
Route.h:57
osmscout::CLASS_FINAL::SegmentMember::way
FileOffset way
Definition
Route.h:59
osmscout::CLASS_FINAL::SegmentMember::direction
MemberDirection direction
Definition
Route.h:58
Generated by
1.17.0