Changeset 57dd40 for src


Ignore:
Timestamp:
Apr 6, 2012, 11:44:09 AM (13 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:
42b6de
Parents:
91be2d
git-author:
Frederik Heber <heber@…> (04/05/12 09:37:13)
git-committer:
Frederik Heber <heber@…> (04/06/12 11:44:09)
Message:

Extracted removal and adding of atoms from AtomicInfo to UndoRedoHelpers module.

Location:
src
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • src/Actions/AtomAction/RemoveAction.cpp

    r91be2d r57dd40  
    2020#include "CodePatterns/MemDebug.hpp"
    2121
     22#include "Actions/UndoRedoHelpers.hpp"
    2223#include "Atom/atom.hpp"
    2324#include "Atom/AtomicInfo.hpp"
     
    6263  AtomRemoveState *state = assert_cast<AtomRemoveState*>(_state.get());
    6364
    64   size_t i=0;
    65   for (; i<state->Walkers.size(); ++i) {
    66     // re-create the atom
    67     LOG(1, "Re-adding atom " << state->Walkers[i].getId() << ".");
    68     atom *Walker = World::getInstance().createAtom();
    69     if (!state->Walkers[i].setAtom(*Walker)) {
    70       ELOG(1, "Failed to set id.");
    71       World::getInstance().destroyAtom(Walker);
    72       break;
    73     }
    74   }
    75   if (i<state->Walkers.size()) {
    76     // remove all previous ones, too
    77     for (size_t j=0;j<i;++j)
    78       World::getInstance().destroyAtom(state->Walkers[j].getId());
    79     // and announce the failure of the undo
     65  // add all removed atoms again
     66  if (AddAtomsFromAtomicInfo(state->Walkers))
     67    return Action::state_ptr(_state);
     68  else
    8069    return Action::failure;
    81   }
    82   return Action::state_ptr(_state);
    8370}
    8471
     
    8774
    8875  // simple remove again all previously added atoms
    89   for (size_t i=0; i<state->Walkers.size(); ++i) {
    90     LOG(1, "Re-removing atom " << state->Walkers[i].getId() << ".");
    91     World::getInstance().destroyAtom(state->Walkers[i].getId());
    92   }
     76  RemoveAtomsFromAtomicInfo(state->Walkers);
    9377
    9478  return Action::state_ptr(_state);
  • src/Actions/Makefile.am

    r91be2d r57dd40  
    1515  Actions/OptionTrait.cpp \
    1616  Actions/Process.cpp \
     17  Actions/UndoRedoHelpers.cpp \
    1718  Actions/Values.cpp \
    1819  Actions/ValueStorage.cpp
     
    4546  Actions/Reaction_impl_header.hpp \
    4647  Actions/Reaction_impl_pre.hpp \
     48  Actions/UndoRedoHelpers.hpp \
    4749  Actions/Values.hpp \
    4850  Actions/ValueStorage.hpp
  • src/documentation/constructs/actions.dox

    r91be2d r57dd40  
    4747 *    prototype.
    4848 *
     49 * \section actions-undo-redo Undoing and Redoing actions ...
    4950 *
    50  *  \date 2011-10-31
     51 * The central points of Actions is that they can be undone and redone. This
     52 * has to be implemented in two more functions beside the "do".
     53 *
     54 * Note that undoing means to get every back to its original state and by whatever
     55 * means seem appropriate, e.g. just remvoing all inserted atoms.
     56 * To make this more elaborate it is usually very useful to store extra information
     57 * in the Action's state such that undo and redo can be accomplished more quickly.
     58 * E.g. if your Action creates some new atoms, store their info as \ref AtomicInfo.
     59 * Then, undo can simply delete the newly created atoms and redo can quickly re-
     60 * create them in the state they have been before.
     61 *
     62 * Have a look at \ref UndoRedoHelpers.hpp for some helper functions on this.
     63 *
     64 *
     65 *  \date 2012-04-05
    5166 *
    5267 */
Note: See TracChangeset for help on using the changeset viewer.