Changeset 29ba9a


Ignore:
Timestamp:
Dec 19, 2025, 10:33:12 PM (9 days ago)
Author:
Frederik Heber <frederik.heber@…>
Branches:
Candidate_v1.7.1, stable
Children:
d2be22
Parents:
37d1c3
git-author:
Frederik Heber <frederik.heber@…> (11/13/25 22:20:55)
git-committer:
Frederik Heber <frederik.heber@…> (12/19/25 22:33:12)
Message:

FIX: QtObservedAtom avoids using atomRef on first subjectKilled.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/UIElements/Qt4/InstanceBoard/QtObservedAtom.cpp

    r37d1c3 r29ba9a  
    378378}
    379379
     380template <typename T>
     381T safelyAccessUpdater(
     382  const size_t& _subjectKilledCount,
     383  const boost::function<T ()> _updater,
     384  const T _defaultValue
     385) {
     386  if (_subjectKilledCount == 0)
     387    return _updater();
     388  return _defaultValue;
     389}
     390
    380391void QtObservedAtom::initObservedValues(
    381392    ObservedValues_t &_ObservedValues,
     
    388399
    389400  // fill ObservedValues: then all the other that need index
     401 
    390402  const boost::function<atomId_t ()> AtomIndexUpdater(
    391       boost::bind(&QtObservedAtom::updateIndex, boost::cref(*_atomref)));
     403        boost::bind<atomId_t>(&QtObservedAtom::updateIndex, boost::cref(*_atomref)));
    392404  const boost::function<ListOfBonds_t ()> AtomBondsUpdater(
    393405      boost::bind(&QtObservedAtom::updateBonds, boost::cref(*_atomref)));
     
    409421  _ObservedValues[AtomIndex] = new ObservedValue_wCallback<atomId_t, ObservedValue_Index_t>(
    410422      _atomref,
    411       AtomIndexUpdater,
     423      boost::bind(safelyAccessUpdater<atomId_t>, boost::cref(subjectKilledCount), AtomIndexUpdater, (atomId_t)0),
    412424      "AtomIndex_"+toString(_id),
    413425      _id,
     
    416428  _ObservedValues[AtomBonds] = new ObservedValue_wCallback<ListOfBonds_t, ObservedValue_Index_t>(
    417429      _atomref,
    418       AtomBondsUpdater,
     430      boost::bind(safelyAccessUpdater<ListOfBonds_t>, boost::cref(subjectKilledCount), AtomBondsUpdater, ListOfBonds_t()),
    419431      "AtomBonds_"+toString(_id),
    420432      AtomBondsUpdater(),
     
    423435  _ObservedValues[AtomElement] = new ObservedValue_wCallback<atomicNumber_t, ObservedValue_Index_t>(
    424436      _atomref,
    425       AtomElementUpdater,
     437      boost::bind(safelyAccessUpdater<atomicNumber_t>, boost::cref(subjectKilledCount), AtomElementUpdater, (atomicNumber_t)0),
    426438      "AtomElement"+toString(_id),
    427439      AtomElementUpdater(),
     
    430442  _ObservedValues[AtomName] = new ObservedValue_wCallback<std::string, ObservedValue_Index_t>(
    431443      _atomref,
    432       AtomNameUpdater,
     444      boost::bind(safelyAccessUpdater<std::string>, boost::cref(subjectKilledCount), AtomNameUpdater, ""),
    433445      "AtomName"+toString(_id),
    434446      AtomNameUpdater(),
     
    437449  _ObservedValues[AtomPosition] = new ObservedValue_wCallback<Vector, ObservedValue_Index_t>(
    438450      _atomref,
    439       AtomPositionUpdater,
     451      boost::bind(safelyAccessUpdater<Vector>, boost::cref(subjectKilledCount), AtomPositionUpdater, zeroVec),
    440452      "AtomPosition_"+toString(_id),
    441453      AtomPositionUpdater(),
     
    444456  _ObservedValues[AtomVelocity] = new ObservedValue_wCallback<Vector, ObservedValue_Index_t>(
    445457      _atomref,
    446       AtomVelocityUpdater,
     458      boost::bind(safelyAccessUpdater<Vector>, boost::cref(subjectKilledCount), AtomVelocityUpdater, zeroVec),
    447459      "AtomVelocity_"+toString(_id),
    448460      AtomVelocityUpdater(),
     
    451463  _ObservedValues[AtomForce] = new ObservedValue_wCallback<Vector, ObservedValue_Index_t>(
    452464      _atomref,
    453       AtomForceUpdater,
     465      boost::bind(safelyAccessUpdater<Vector>, boost::cref(subjectKilledCount), AtomForceUpdater, zeroVec),
    454466      "AtomForce_"+toString(_id),
    455467      AtomForceUpdater(),
     
    458470  _ObservedValues[AtomSelected] = new ObservedValue_wCallback<bool, ObservedValue_Index_t>(
    459471      _atomref,
    460       AtomSelectedUpdater,
     472      boost::bind(safelyAccessUpdater<bool>, boost::cref(subjectKilledCount), AtomSelectedUpdater, false),
    461473      "AtomSelected_"+toString(_id),
    462474      AtomSelectedUpdater(),
     
    465477  _ObservedValues[MoleculeRef] = new ObservedValue_wCallback<QtObservedMolecule*, ObservedValue_Index_t>(
    466478      _atomref,
    467       MoleculeRefUpdater,
     479      boost::bind(safelyAccessUpdater<QtObservedMolecule*>, boost::cref(subjectKilledCount), MoleculeRefUpdater, (QtObservedMolecule*)NULL),
    468480      "AtomMoleculeIndex"+toString(_id),
    469481      MoleculeRefUpdater(),
Note: See TracChangeset for help on using the changeset viewer.