From e6e1978584d203f1f2f8587f178d879dfdf7fe06 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Sat, 6 Nov 2021 14:36:58 +0100 Subject: [PATCH] only call expensive wstring_convert() when necessary --- src/ifcparse/IfcCharacterDecoder.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/ifcparse/IfcCharacterDecoder.cpp b/src/ifcparse/IfcCharacterDecoder.cpp index 8e93ae2437..456136a688 100644 --- a/src/ifcparse/IfcCharacterDecoder.cpp +++ b/src/ifcparse/IfcCharacterDecoder.cpp @@ -201,7 +201,18 @@ namespace { builder_.push_back('\''); if (mode == IfcParse::IfcCharacterDecoder::UTF8) { - return IfcUtil::convert_utf8(builder_); + if (builder_.empty()) { + static std::string empty; + return empty; + } else { + auto it = std::max_element(builder_.begin(), builder_.end()); + if (*it <= 0x7e) { + std::string r(builder_.begin(), builder_.end()); + return r; + } else { + return IfcUtil::convert_utf8(builder_); + } + } } else if (mode == IfcParse::IfcCharacterDecoder::SUBSTITUTE) { std::string r; r.reserve(builder_.size());