11// Copyright 2023, University of Freiburg
22// Authors: Patrick Brosi <[email protected] >33
4+ #include " GeometryCache.h"
5+
46#include < fstream>
57#include < iostream>
68#include < mutex>
79#include < vector>
810
9- #include " GeometryCache.h"
1011#include " util/geo/Geo.h"
1112
1213const static size_t MAX_MEM_CACHE_SIZE = 1 * 1024 * 1024 * 20l ;
@@ -200,8 +201,10 @@ std::pair<size_t, sj::Line> sj::GeometryCache<sj::Line>::getFrom(
200201 estSize += sizeof (sj::boxids::BoxId) * numBoxIds;
201202 }
202203
203- // OBB
204- estSize += readPoly (str, ret.obb );
204+ if (_opts.storeOBB ) {
205+ // OBB
206+ estSize += readPoly (str, ret.obb );
207+ }
205208
206209 return {estSize, ret};
207210}
@@ -254,25 +257,31 @@ std::pair<size_t, sj::Area> sj::GeometryCache<sj::Area>::getFrom(
254257 estSize += sizeof (sj::boxids::BoxId) * numBoxIds;
255258 }
256259
257- // OBB
258- estSize += readPoly (str, ret.obb );
260+ if (_opts.storeOBB ) {
261+ // OBB
262+ estSize += readPoly (str, ret.obb );
263+ }
259264
260- // simplified inner
261- estSize += readPoly (str, ret.inner );
265+ if (_opts.storeInnerOuter ) {
266+ // simplified inner
267+ estSize += readPoly (str, ret.inner );
262268
263- if (!ret.inner .empty ()) {
264- str.read (reinterpret_cast <char *>(&ret.innerBox ), sizeof (util::geo::I32Box));
265- str.read (reinterpret_cast <char *>(&ret.innerOuterArea ), sizeof (double ));
266- estSize += sizeof (double ) + sizeof (util::geo::I32Box);
267- }
269+ if (!ret.inner .empty ()) {
270+ str.read (reinterpret_cast <char *>(&ret.innerBox ),
271+ sizeof (util::geo::I32Box));
272+ str.read (reinterpret_cast <char *>(&ret.innerOuterArea ), sizeof (double ));
273+ estSize += sizeof (double ) + sizeof (util::geo::I32Box);
274+ }
268275
269- // simplified outer
270- estSize += readPoly (str, ret.outer );
276+ // simplified outer
277+ estSize += readPoly (str, ret.outer );
271278
272- if (!ret.outer .empty ()) {
273- str.read (reinterpret_cast <char *>(&ret.outerBox ), sizeof (util::geo::I32Box));
274- str.read (reinterpret_cast <char *>(&ret.outerOuterArea ), sizeof (double ));
275- estSize += sizeof (double ) + sizeof (util::geo::I32Box);
279+ if (!ret.outer .empty ()) {
280+ str.read (reinterpret_cast <char *>(&ret.outerBox ),
281+ sizeof (util::geo::I32Box));
282+ str.read (reinterpret_cast <char *>(&ret.outerOuterArea ), sizeof (double ));
283+ estSize += sizeof (double ) + sizeof (util::geo::I32Box);
284+ }
276285 }
277286
278287 return {estSize, ret};
@@ -281,7 +290,7 @@ std::pair<size_t, sj::Area> sj::GeometryCache<sj::Area>::getFrom(
281290// ____________________________________________________________________________
282291template <>
283292size_t sj::GeometryCache<sj::Point>::writeTo(const sj::Point& val,
284- std::ostream& str) {
293+ std::ostream& str) const {
285294 size_t ret = 0 ;
286295
287296 // id
@@ -333,7 +342,7 @@ size_t sj::GeometryCache<W>::add(const std::string& raw) {
333342// ____________________________________________________________________________
334343template <>
335344size_t sj::GeometryCache<sj::SimpleArea>::writeTo(const sj::SimpleArea& val,
336- std::ostream& str) {
345+ std::ostream& str) const {
337346 size_t ret = 0 ;
338347
339348 // geom
@@ -362,7 +371,7 @@ size_t sj::GeometryCache<sj::SimpleArea>::writeTo(const sj::SimpleArea& val,
362371
363372template <>
364373size_t sj::GeometryCache<sj::SimpleLine>::writeTo(const sj::SimpleLine& val,
365- std::ostream& str) {
374+ std::ostream& str) const {
366375 size_t ret = 0 ;
367376
368377 // geoms
@@ -384,7 +393,7 @@ size_t sj::GeometryCache<sj::SimpleLine>::writeTo(const sj::SimpleLine& val,
384393// ____________________________________________________________________________
385394template <>
386395size_t sj::GeometryCache<sj::Line>::writeTo(const sj::Line& val,
387- std::ostream& str) {
396+ std::ostream& str) const {
388397 size_t ret = 0 ;
389398
390399 // geoms
@@ -420,16 +429,18 @@ size_t sj::GeometryCache<sj::Line>::writeTo(const sj::Line& val,
420429
421430 ret += sizeof (uint32_t ) + sizeof (sj::boxids::BoxId) * size;
422431
423- // OBB
424- ret += writePoly (val.obb , str);
432+ if (_opts.storeOBB ) {
433+ // OBB
434+ ret += writePoly (val.obb , str);
435+ }
425436
426437 return ret;
427438}
428439
429440// ____________________________________________________________________________
430441template <>
431442size_t sj::GeometryCache<sj::Area>::writeTo(const sj::Area& val,
432- std::ostream& str) {
443+ std::ostream& str) const {
433444 size_t ret = 0 ;
434445
435446 // geoms
@@ -469,35 +480,39 @@ size_t sj::GeometryCache<sj::Area>::writeTo(const sj::Area& val,
469480
470481 ret += sizeof (uint32_t ) + sizeof (sj::boxids::BoxId) * size;
471482
472- // OBB
473- ret += writePoly (val.obb , str);
483+ if (_opts.storeOBB ) {
484+ // OBB
485+ ret += writePoly (val.obb , str);
486+ }
474487
475- // innerGeom
476- ret += writePoly (val.inner , str);
488+ if (_opts.storeInnerOuter ) {
489+ // innerGeom
490+ ret += writePoly (val.inner , str);
477491
478- if (!val.inner .empty ()) {
479- str.write (reinterpret_cast <const char *>(&val.innerBox ),
480- sizeof (util::geo::I32Box));
481- ret += sizeof (util::geo::I32Box);
492+ if (!val.inner .empty ()) {
493+ str.write (reinterpret_cast <const char *>(&val.innerBox ),
494+ sizeof (util::geo::I32Box));
495+ ret += sizeof (util::geo::I32Box);
482496
483- // inner area
484- str.write (reinterpret_cast <const char *>(&val.innerOuterArea ),
485- sizeof (double ));
486- ret += sizeof (double );
487- }
497+ // inner area
498+ str.write (reinterpret_cast <const char *>(&val.innerOuterArea ),
499+ sizeof (double ));
500+ ret += sizeof (double );
501+ }
488502
489- // outerGeom
490- ret += writePoly (val.outer , str);
503+ // outerGeom
504+ ret += writePoly (val.outer , str);
491505
492- if (!val.outer .empty ()) {
493- str.write (reinterpret_cast <const char *>(&val.outerBox ),
494- sizeof (util::geo::I32Box));
495- ret += sizeof (util::geo::I32Box);
506+ if (!val.outer .empty ()) {
507+ str.write (reinterpret_cast <const char *>(&val.outerBox ),
508+ sizeof (util::geo::I32Box));
509+ ret += sizeof (util::geo::I32Box);
496510
497- // outer area
498- str.write (reinterpret_cast <const char *>(&val.outerOuterArea ),
499- sizeof (double ));
500- ret += sizeof (double );
511+ // outer area
512+ str.write (reinterpret_cast <const char *>(&val.outerOuterArea ),
513+ sizeof (double ));
514+ ret += sizeof (double );
515+ }
501516 }
502517
503518 return ret;
0 commit comments