Don't use cached items in multi-threaded mode for now until we have proper immutability

This commit is contained in:
Thomas Krijnen
2024-06-11 11:20:40 +02:00
parent aa0fbd434e
commit c2efcda7bb
3 changed files with 15 additions and 4 deletions
+4
View File
@@ -171,6 +171,10 @@ namespace IfcGeom {
converter_ = new ifcopenshell::geometry::Converter(geometry_library_, ifc_file, settings_);
std::vector<ifcopenshell::geometry::geometry_conversion_task> reps;
if (num_threads_ != 1) {
// @todo this shouldn't be necessary with properly immutable taxonomy items
converter_->mapping()->use_caching() = false;
}
converter_->mapping()->get_representations(reps, filters_);
for (auto& task : reps) {
+5
View File
@@ -28,6 +28,8 @@ namespace geometry {
class abstract_mapping {
protected:
Settings settings_;
bool use_caching_ = true;
public:
abstract_mapping(Settings& s) : settings_(s) {}
@@ -45,6 +47,9 @@ namespace geometry {
const Settings& settings() const { return settings_; }
Settings& settings() { return settings_; }
bool use_caching() const { return use_caching_; }
bool& use_caching() { return use_caching_; }
};
namespace impl {
+6 -4
View File
@@ -520,9 +520,11 @@ taxonomy::ptr mapping::map_impl(const IfcSchema::IfcStyledItem* inst) {
taxonomy::ptr mapping::map(const IfcBaseInterface* inst) {
auto iden = inst->as<IfcUtil::IfcBaseClass>()->identity();
auto it = cache_.find(iden);
if (it != cache_.end()) {
return it->second;
if (use_caching_) {
auto it = cache_.find(iden);
if (it != cache_.end()) {
return it->second;
}
}
taxonomy::ptr item = nullptr;
@@ -532,7 +534,7 @@ taxonomy::ptr mapping::map(const IfcBaseInterface* inst) {
#include "bind_convert_impl.i"
if (item) {
if (use_caching_ && item) {
cache_.insert({ iden, item });
}
else {