Merge pull request #1182 from KLayout/issue-1178

Fixed issue #1178 (technology-data xml results in SEGV)
This commit is contained in:
Matthias Köfferlein 2022-11-09 23:29:06 +01:00 committed by GitHub
commit 7589efd781
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 7 additions and 10 deletions

View File

@ -88,30 +88,27 @@ template <class Value>
struct FallbackXMLWriteAdaptor
{
FallbackXMLWriteAdaptor (void (db::NetTracerConnectivity::*member) (const Value &), void (db::NetTracerConnectivity::*clear) ())
: mp_member (member), mp_clear (clear), mp_stack (0)
: mp_member (member), mp_clear (clear)
{
// .. nothing yet ..
}
void operator () (db::NetTracerTechnologyComponent &owner, tl::XMLReaderState &reader) const
{
if (! mp_stack) {
mp_stack = const_cast<db::NetTracerConnectivity *> (get_default (owner));
if (! mp_stack) {
owner.push_back (db::NetTracerConnectivity ());
mp_stack = (owner.end () - 1).operator-> ();
}
(mp_stack->*mp_clear) ();
db::NetTracerConnectivity *stack = const_cast<db::NetTracerConnectivity *> (get_default (owner));
if (! stack) {
owner.push_back (db::NetTracerConnectivity ());
stack = (owner.end () - 1).operator-> ();
}
(stack->*mp_clear) ();
tl::XMLObjTag<Value> tag;
(mp_stack->*mp_member) (*reader.back (tag));
(stack->*mp_member) (*reader.back (tag));
}
private:
void (db::NetTracerConnectivity::*mp_member) (const Value &);
void (db::NetTracerConnectivity::*mp_clear) ();
mutable db::NetTracerConnectivity *mp_stack;
};
template <class Value, class Iter>