1#ifndef OSMSCOUT_TILEDDATACACHE_H
2#define OSMSCOUT_TILEDDATACACHE_H
55 mutable std::mutex mutex;
59 std::vector<O> prefillData;
72 std::scoped_lock<std::mutex> guard(mutex);
82 std::scoped_lock<std::mutex> guard(mutex);
92 const std::vector<O>& data)
94 std::scoped_lock<std::mutex> guard(mutex);
96 if (this->types.Empty()) {
100 this->types.Add(types);
103 if (this->prefillData.empty()) {
104 this->prefillData=data;
107 this->prefillData.reserve(this->prefillData.size()+data.size());
108 this->prefillData.insert(this->prefillData.end(),data.begin(),data.end());
119 std::vector<O>&& data)
121 std::scoped_lock<std::mutex> guard(mutex);
123 if (this->types.Empty()) {
127 this->types.Add(types);
130 if (this->prefillData.empty()) {
131 this->prefillData=std::move(data);
134 this->prefillData.reserve(this->prefillData.size()+data.size());
135 this->prefillData.insert(this->prefillData.end(),data.begin(),data.end());
145 const std::vector<O>& data)
147 std::scoped_lock<std::mutex> guard(mutex);
149 this->data.insert(this->data.end(), data.begin(), data.end());
150 this->types.Add(types);
159 const std::vector<O>& data)
161 std::scoped_lock<std::mutex> guard(mutex);
173 std::vector<O>&& data)
175 std::scoped_lock<std::mutex> guard(mutex);
177 this->data=std::move(data);
189 std::scoped_lock<std::mutex> guard(mutex);
199 std::scoped_lock<std::mutex> guard(mutex);
212 std::scoped_lock<std::mutex> guard(mutex);
219 std::scoped_lock<std::mutex> guard(mutex);
221 return prefillData.size()+data.size();
224 void CopyData(std::function<
void(
const O&)> function)
const
226 std::scoped_lock<std::mutex> guard(mutex);
228 std::for_each(prefillData.begin(),prefillData.end(),function);
229 std::for_each(data.begin(),data.end(),function);
284 explicit Tile(
const TileKey& key);
304 return key.GetLevel();
352 return optimizedWayData;
360 return optimizedAreaData;
400 return optimizedWayData;
408 return optimizedAreaData;
416 return nodeData.IsComplete() &&
417 wayData.IsComplete() &&
418 areaData.IsComplete() &&
419 routeData.IsComplete() &&
420 optimizedWayData.IsComplete() &&
421 optimizedAreaData.IsComplete();
429 return nodeData.IsEmpty() &&
431 areaData.IsEmpty() &&
432 routeData.IsEmpty() &&
433 optimizedWayData.IsEmpty() &&
434 optimizedAreaData.IsEmpty();
478 using Cache = std::list<CacheEntry>;
481 using CacheRef = Cache::iterator;
484 using CacheIndex = std::map<TileKey, CacheRef>;
489 mutable CacheIndex tileIndex;
490 mutable Cache tileCache;
492 void ResolveNodesFromParent(
Tile& tile,
493 const Tile& parentTile,
494 const GeoBox& boundingBox,
495 const TypeInfoSet& nodeTypes);
496 void ResolveWaysFromParent(
Tile& tile,
497 const Tile& parentTile,
498 const GeoBox& boundingBox,
499 const TypeInfoSet& wayTypes);
500 void ResolveAreasFromParent(
Tile& tile,
501 const Tile& parentTile,
502 const GeoBox& boundingBox,
503 const TypeInfoSet& areaTypes);
504 void ResolveRoutesFromParent(
Tile& route,
505 const Tile& parentTile,
506 const GeoBox& boundingBox,
507 const TypeInfoSet& routeTypes);
521 return tileCache.size();
532 const GeoBox& boundingBox,
533 std::list<TileRef>& tiles)
const;
536 const TypeInfoSet& nodeTypes,
537 const TypeInfoSet& wayTypes,
538 const TypeInfoSet& areaTypes,
539 const TypeInfoSet& routeTypes,
540 const TypeInfoSet& optimizedWayTypes,
541 const TypeInfoSet& optimizedAreaTypes);
#define OSMSCOUT_MAP_API
Definition MapImportExport.h:45
Definition DataTileCache.h:457
void PrefillDataFromCache(Tile &tile, const TypeInfoSet &nodeTypes, const TypeInfoSet &wayTypes, const TypeInfoSet &areaTypes, const TypeInfoSet &routeTypes, const TypeInfoSet &optimizedWayTypes, const TypeInfoSet &optimizedAreaTypes)
void SetSize(size_t cacheSize)
TileRef GetCachedTile(const TileKey &id) const
size_t GetSize() const
Definition DataTileCache.h:514
DataTileCache(size_t cacheSize)
size_t GetCurrentSize() const
Definition DataTileCache.h:519
TileRef GetTile(const TileKey &id) const
void GetTilesForBoundingBox(const Magnification &magnification, const GeoBox &boundingBox, std::list< TileRef > &tiles) const
Definition DataTileCache.h:53
void AddPrefillData(const TypeInfoSet &types, const std::vector< O > &data)
Definition DataTileCache.h:91
bool IsEmpty() const
Definition DataTileCache.h:70
void Invalidate()
Definition DataTileCache.h:80
void SetData(const TypeInfoSet &types, const std::vector< O > &data)
Definition DataTileCache.h:158
void SetData(const TypeInfoSet &types, std::vector< O > &&data)
Definition DataTileCache.h:172
size_t GetDataSize() const
Definition DataTileCache.h:217
void SetComplete()
Definition DataTileCache.h:187
void AddPrefillData(const TypeInfoSet &types, std::vector< O > &&data)
Definition DataTileCache.h:118
void CopyData(std::function< void(const O &)> function) const
Definition DataTileCache.h:224
void AddData(const TypeInfoSet &types, const std::vector< O > &data)
Definition DataTileCache.h:144
bool IsComplete() const
Definition DataTileCache.h:197
TypeInfoSet GetTypes() const
Definition DataTileCache.h:210
Definition DataTileCache.h:272
TileRouteData & GetRouteData()
Definition DataTileCache.h:390
friend class DataTileCache
Definition DataTileCache.h:287
const TileAreaData & GetAreaData() const
Definition DataTileCache.h:334
const TileRouteData & GetRouteData() const
Definition DataTileCache.h:342
TileAreaData & GetAreaData()
Definition DataTileCache.h:382
bool IsComplete() const
Definition DataTileCache.h:414
GeoBox GetBoundingBox() const
Definition DataTileCache.h:310
const TileAreaData & GetOptimizedAreaData() const
Definition DataTileCache.h:358
const TileWayData & GetWayData() const
Definition DataTileCache.h:326
TileNodeData & GetNodeData()
Definition DataTileCache.h:366
const TileNodeData & GetNodeData() const
Definition DataTileCache.h:318
TileKey GetKey() const
Definition DataTileCache.h:294
const TileWayData & GetOptimizedWayData() const
Definition DataTileCache.h:350
TileWayData & GetOptimizedWayData()
Definition DataTileCache.h:398
TileWayData & GetWayData()
Definition DataTileCache.h:374
TileAreaData & GetOptimizedAreaData()
Definition DataTileCache.h:406
bool IsEmpty() const
Definition DataTileCache.h:427
uint32_t GetLevel() const
Definition DataTileCache.h:302
std::shared_ptr< Tile > TileRef
Definition DataTileCache.h:443
TileData< WayRef > TileWayData
Definition DataTileCache.h:245
TileData< AreaRef > TileAreaData
Definition DataTileCache.h:252
std::shared_ptr< DataTileCache > TiledDataCacheRef
Definition DataTileCache.h:549
TileData< RouteRef > TileRouteData
Definition DataTileCache.h:259
TileData< NodeRef > TileNodeData
Definition DataTileCache.h:238