Changeset d4ba3f for src/Atom


Ignore:
Timestamp:
Feb 11, 2016, 8:06:49 AM (9 years ago)
Author:
Frederik Heber <heber@…>
Branches:
Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
Children:
ada8df
Parents:
5d8f4f
git-author:
Frederik Heber <heber@…> (12/29/15 14:23:09)
git-committer:
Frederik Heber <heber@…> (02/11/16 08:06:49)
Message:

Extracted common code out of Molecule/AtomObserver into EntityObserver.

Location:
src/Atom
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/Atom/AtomObserver.cpp

    r5d8f4f rd4ba3f  
    3636#include "CodePatterns/MemDebug.hpp"
    3737
    38 #include "AtomObserver.hpp"
     38#include <boost/assign.hpp>
    3939
    4040#include "CodePatterns/Singleton_impl.hpp"
    4141
    42 #include "Atom/atom.hpp"
    4342#include "Atom/atom_observable.hpp"
    4443
     44#include "AtomObserver.hpp"
    4545
    46 /** Private constructor of class AtomObserver.
    47  *
    48  */
    49 AtomObserver::AtomObserver() :
    50   Relay(std::string("AtomObserver"))
     46using namespace boost::assign;
     47
     48static const Observable::channels_t getAtomChannels()
    5149{
    52   Channels *OurChannel = new Channels();
    53   Observable::insertNotificationChannel( std::make_pair(static_cast<Observable *>(this), OurChannel) );
    54   OurChannel->addChannel(AtomObservable::PositionChanged);
    55   OurChannel->addChannel(AtomObservable::VelocityChanged);
    56   OurChannel->addChannel(AtomObservable::ForceChanged);
    57   OurChannel->addChannel(AtomObservable::MoleculeChanged);
    58   OurChannel->addChannel(AtomObservable::NameChanged);
    59   OurChannel->addChannel(AtomObservable::ElementChanged);
    60   OurChannel->addChannel(AtomObservable::IndexChanged);
    61   OurChannel->addChannel(AtomObservable::PropertyChanged);
    62   OurChannel->addChannel(AtomObservable::BondsAdded);
    63   OurChannel->addChannel(AtomObservable::BondsRemoved);
    64   OurChannel->addChannel(AtomObservable::TrajectoryChanged);
    65   OurChannel->addChannel(AtomObservable::SelectionChanged);
     50  Observable::channels_t channels;
     51  for (int i=0;i<AtomObservable::NotificationType_MAX; ++i)
     52    channels += (enum AtomObservable::NotificationType)i;
     53  return channels;
    6654}
    6755
    68 /** Private Destructor of class AtomObserver.
    69  *
    70  */
    71 AtomObserver::~AtomObserver()
     56const Observable::channels_t AtomObserver::AtomChannels(getAtomChannels());
     57
     58AtomObserver::AtomObserver() :
     59    EntityObserver<atom>(AtomChannels, std::string("AtomObserver"))
    7260{}
    7361
    74 /** Function to call when a new atom has been created.
    75  *
    76  * @param res
    77  */
    78 void AtomObserver::AtomInserted(atom *res)
    79 {
    80   res->signOn(this, AtomObservable::PositionChanged);
    81   res->signOn(this, AtomObservable::VelocityChanged);
    82   res->signOn(this, AtomObservable::ForceChanged);
    83   res->signOn(this, AtomObservable::MoleculeChanged);
    84   res->signOn(this, AtomObservable::NameChanged);
    85   res->signOn(this, AtomObservable::ElementChanged);
    86   res->signOn(this, AtomObservable::IndexChanged);
    87   res->signOn(this, AtomObservable::PropertyChanged);
    88   res->signOn(this, AtomObservable::BondsAdded);
    89   res->signOn(this, AtomObservable::BondsRemoved);
    90   res->signOn(this, AtomObservable::TrajectoryChanged);
    91   res->signOn(this, AtomObservable::SelectionChanged);
    92 }
    93 
    94 /** Function to call when an atom is about to get deleted.
    95  *
    96  * @param res
    97  */
    98 void AtomObserver::AtomRemoved(atom *res)
    99 {
    100   res->signOff(this, AtomObservable::PositionChanged);
    101   res->signOff(this, AtomObservable::VelocityChanged);
    102   res->signOff(this, AtomObservable::ForceChanged);
    103   res->signOff(this, AtomObservable::MoleculeChanged);
    104   res->signOff(this, AtomObservable::NameChanged);
    105   res->signOff(this, AtomObservable::ElementChanged);
    106   res->signOff(this, AtomObservable::IndexChanged);
    107   res->signOff(this, AtomObservable::PropertyChanged);
    108   res->signOff(this, AtomObservable::BondsAdded);
    109   res->signOff(this, AtomObservable::BondsRemoved);
    110   res->signOff(this, AtomObservable::TrajectoryChanged);
    111   res->signOff(this, AtomObservable::SelectionChanged);
    112 }
    113 
    11462CONSTRUCT_SINGLETON(AtomObserver)
  • src/Atom/AtomObserver.hpp

    r5d8f4f rd4ba3f  
    1414#endif
    1515
    16 #include "CodePatterns/Observer/Relay.hpp"
    1716#include "CodePatterns/Singleton.hpp"
     17
     18#include "EntityObserver.hpp"
    1819
    1920class atom;
     
    2122/** The AtomObserver is a central instance to all changes occuring within atoms.
    2223 *
    23  * The intent is that if a class wants to know about changes in just _any_ atom,
    24  * he may register singly to this class and not to each and every atom. This also
    25  * keeps him updated in case of removed or added atoms.
    26  *
    27  * \warning AtomObserver must get purged \b after World as we do not keep an
    28  * an internal list of all atoms. Hence, each atom must get destroyed while
    29  * the AtomObserver instance is still intact or segfault will occur.
     24 * It implements the templated EntityObserver class for atoms.
    3025 *
    3126 * \sa MoleculeObserver
    3227 */
    33 class AtomObserver : public Singleton<AtomObserver>, public Relay
     28class AtomObserver : public Singleton< AtomObserver >, public EntityObserver<atom>
    3429{
    3530  //!> grant Singleton access to cstor and dstor.
    36   friend class Singleton<AtomObserver>;
     31  friend class Singleton< AtomObserver >;
    3732
    38   //!> grant atom access
    39   friend class atom;
    40 public:
    41 
    42 private:
    43   void AtomInserted(atom *res);
    44   void AtomRemoved(atom *res);
     33  //!> list of all observed channels
     34  static const Observable::channels_t AtomChannels;
    4535
    4636  // private constructor and destructor due to singleton
    4737  AtomObserver();
    48   virtual ~AtomObserver();
    4938};
    5039
  • src/Atom/atom.cpp

    r5d8f4f rd4ba3f  
    6060{
    6161  // note AtomObserver about inserted atom
    62   AtomObserver::getInstance().AtomInserted(this);
     62  AtomObserver::getInstance().Inserted(this);
    6363}
    6464
     
    7575
    7676  // note AtomObserver about inserted atom
    77   AtomObserver::getInstance().AtomInserted(this);
     77  AtomObserver::getInstance().Inserted(this);
    7878};
    7979
     
    9595  removeFromMolecule();
    9696  // note AtomObserver about removed atom
    97   AtomObserver::getInstance().AtomRemoved(this);
     97  AtomObserver::getInstance().Removed(this);
    9898}
    9999
Note: See TracChangeset for help on using the changeset viewer.