Changeset dbb474
- Timestamp:
- Mar 3, 2010, 1:57:41 PM (15 years ago)
- 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:
- 1c51c8
- Parents:
- a1510d
- Location:
- src
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Actions/Calculation.hpp
ra1510d rdbb474 11 11 #include "Actions/Process.hpp" 12 12 13 /** 14 * A calculation is a Process that has some kind of result. 15 * 16 * This class can be used in the same way as any other Action or Process, but has some special methods 17 * for inspecting the result of the calculation. 18 */ 13 19 template<typename T> 14 20 class Calculation : public Process … … 18 24 virtual ~Calculation(); 19 25 26 /** 27 * Reimplemented call method for Action Base class. 28 * Resets the result and then redoes the calculation. Can be used to retrigger calculations 29 * from menu Items or other places. 30 */ 20 31 virtual void call(); 21 32 virtual void undo(); 22 33 virtual bool canUndo(); 23 34 35 /** 36 * Does the actual calculation and returns the result. 37 * When the calculation has been done before it is not redone, but the previous cached result is returned. 38 * Call reset to delete the cached value. 39 */ 24 40 virtual T operator()(); 41 42 /** 43 * Check if a cached result is available. 44 */ 25 45 virtual bool hasResult(); 46 47 /** 48 * Get the cached result. 49 * Fails if there is no cached result. 50 */ 26 51 virtual T getResult(); 52 53 /** 54 * Delete a previously calculated result from the cache. 55 */ 27 56 virtual void reset(); 28 57 29 58 protected: 30 59 T* result; 60 61 /** 62 * Pure virtual method for implementation of the actual calculation procedure. 63 */ 31 64 virtual T* doCalc()=0; 32 65 private: -
src/Actions/Process.cpp
ra1510d rdbb474 73 73 { 74 74 OBSERVE; 75 active = true;76 75 currStep=0; 77 76 } 78 77 starts = false; 78 active = true; 79 79 } 80 80 … … 85 85 86 86 void Process::stop(){ 87 active=false; 87 88 stops = true; 88 89 { 89 90 OBSERVE; 90 91 currStep=0; 91 active=false;92 92 } 93 93 { -
src/Actions/Process.hpp
ra1510d rdbb474 19 19 #include "Actions/Action.hpp" 20 20 21 /** 22 * A Process is an Action that might take some time and therefore has special 23 * methods to allow communication with progress indicators. Indicators 24 * can sign on at a global place and will be notified when any process is doing 25 * a calculation. 26 * 27 * A Process has four states: 28 * - starting: It is in the process of setting itself up, and wants everybody to know that it will start 29 * the calculation soon. Indicators should set up anything they need for displaying the progress 30 * when they are notified by a process in this state. 31 * - active: The process is currently doing it's thing and wants any indicator to know it's status, i.e. 32 * the percentage done. 33 * - stopping: The process has fullfilled it's purpose and is shutting down. Indicators recieving this status 34 * should also use it to shut down their indication mechanism and delete any objects allocated for 35 * this Process 36 * - inactive: This Process is currently sleeping. If a Process is sending out any signals in this state, there 37 * is something seriously wrong. 38 */ 21 39 class Process : public Action, public Observable 22 40 { -
src/Descriptors/AtomDescriptor.hpp
ra1510d rdbb474 21 21 class AtomDescripter_impl; 22 22 23 /** 24 * An AtomDescriptor describes a Set of Atoms from the World. Can be used for any method that needs to work on 25 * a specific set of Atoms. 26 * 27 * This Class is implemented using the PIMPL-Idion, i.e. this class only contains an abstract structure 28 * that forwards any request to a wrapped pointer-to-implementation. This way operators and calculations 29 * on Descriptors are possible. 30 * 31 * Concrete Implementation Objects can be shared between multiple Wrappers, so make sure that 32 * any Implementation remainst constant during lifetime. 33 */ 23 34 class AtomDescriptor { 24 35 // close coupling to the world to allow access … … 32 43 33 44 public: 34 typedef boost::shared_ptr<AtomDescriptor_impl> impl_ptr; 45 typedef boost::shared_ptr<AtomDescriptor_impl> impl_ptr; //!< Allow easy changes of the pointer-to-implementation type 35 46 36 47 AtomDescriptor(impl_ptr); 48 49 /** 50 * Copy constructor. 51 * Takes the Implementation from the copied object and sets it's own pointer to link there. 52 * This way the actuall implementation object is shared between copy and original 53 */ 37 54 AtomDescriptor(const AtomDescriptor&); 38 55 ~AtomDescriptor(); 39 56 57 /** 58 * Assignment Operator. 59 * 60 * Implemented by setting the pointer to the new Implementation. 61 */ 40 62 AtomDescriptor &operator=(AtomDescriptor &); 41 63 42 64 protected: 65 /** 66 * forward Method to implementation 67 */ 43 68 atom* find(); 69 70 /** 71 * forward Method to implementation 72 */ 44 73 std::vector<atom*> findAll(); 74 75 /** 76 * Return the implementation this Wrapper currently points to. 77 * Used for copying, assignment and in Iterators over subsets of the World. 78 */ 45 79 impl_ptr get_impl() const; 46 80 … … 49 83 }; 50 84 51 // Functions to construct actual descriptors 85 /** 86 * produce an Atomdescriptor that at the point of construction contains an implementation that matches all Atoms 87 */ 52 88 AtomDescriptor AllAtoms(); 89 90 /** 91 * produce an Atomdescriptor that at the point of construction contains an implementation that matches no Atoms 92 */ 53 93 AtomDescriptor NoAtoms(); 54 94 55 // no true short circuit, but the test of the second descriptor wont be done 95 /** 96 * Set Intersection for two Atomdescriptors. The resulting Atomdescriptor will only match an Atom if both 97 * given Atomdescriptors also match. Uses short circuit inside, so the second predicate wont be called 98 * when the first one failed. 99 */ 56 100 AtomDescriptor operator&&(const AtomDescriptor &lhs, const AtomDescriptor &rhs); 101 102 /** 103 * Set Union for two AtomDescriptors. The resulting AtomDescriptor will match an Atom if at least one of 104 * the two given AtomDescriptors does match. Used short circuit inside, so the second predicate wont 105 * be called when the first one failed. 106 */ 57 107 AtomDescriptor operator||(const AtomDescriptor &lhs, const AtomDescriptor &rhs); 108 109 /** 110 * Set inversion for an AtomDescriptor. Matches an Atom if the given AtomDescriptor did not match. 111 */ 58 112 AtomDescriptor operator!(const AtomDescriptor &arg); 59 113 -
src/Descriptors/AtomDescriptor_impl.hpp
ra1510d rdbb474 5 5 6 6 /************************ Declarations of implementation Objects ************************/ 7 8 /** 9 * This class implements a general Base class for AtomDescriptors using the PIMPL-Idiom 10 * 11 * The predicate for this class is empty and should be implemented by derived classes. 12 * By the predicate it is described which atoms should be picked for a given descriptor. 13 */ 7 14 8 15 class AtomDescriptor_impl … … 14 21 virtual ~AtomDescriptor_impl(); 15 22 23 /** 24 * Implement this abstract Method to make a concrete AtomDescriptor pick certain Atoms 25 */ 16 26 virtual bool predicate(std::pair<atomId_t,atom*>)=0; 17 27 18 28 protected: 29 30 /** 31 * This method is called when the Descriptor is used to find the first matching 32 * Atom. Walks through all Atoms and stops on the first match. Can be implemented 33 * when the searched Atom can be found in a more efficient way. Calculated 34 * Atomdescriptors will always use this method, so no improvement there. 35 */ 19 36 virtual atom* find(); 37 38 /** 39 * This method is called when the Descriptor is used to find all matching Atoms. 40 * Walks through all Atoms and tests the predicate on each one. A vector of all 41 * matching Atoms is returned. 42 */ 20 43 virtual std::vector<atom*> findAll(); 44 45 /** 46 * This method is used internally to query the Set of Atoms from the world. 47 * By using this method derived classes can also access the Internal World Datastructre. 48 * Implemented in full in the Base Descriptor Implementation, so only this one method 49 * needs to be friend with the World class. 50 */ 21 51 World::AtomSet& getAtoms(); 22 52 }; … … 24 54 /************************** Universe and Emptyset *****************/ 25 55 56 /** 57 * A simple AtomDescriptor that will always match all Atoms present in the World. 58 */ 26 59 class AtomAllDescriptor_impl : public AtomDescriptor_impl { 27 60 public: 28 61 AtomAllDescriptor_impl(); 29 62 virtual ~AtomAllDescriptor_impl(); 63 64 /** 65 * Always returns true for any Atom 66 */ 30 67 virtual bool predicate(std::pair<atomId_t,atom*>); 31 68 }; 32 69 70 71 /** 72 * An AtomDescriptor that never matches any Atom in the World. 73 */ 33 74 class AtomNoneDescriptor_impl : public AtomDescriptor_impl { 34 75 public: 35 76 AtomNoneDescriptor_impl(); 36 77 virtual ~AtomNoneDescriptor_impl(); 78 79 /** 80 * Always returns false for any Atom 81 */ 37 82 virtual bool predicate(std::pair<atomId_t,atom*>); 38 83 }; … … 40 85 /************************** Operator stuff ************************/ 41 86 87 /** 88 * Intersection of two AtomDescriptors 89 */ 42 90 class AtomAndDescriptor_impl : public AtomDescriptor_impl 43 91 { … … 45 93 AtomAndDescriptor_impl(AtomDescriptor::impl_ptr _lhs, AtomDescriptor::impl_ptr _rhs); 46 94 ~AtomAndDescriptor_impl(); 95 96 /** 97 * This predicate uses the predicate from the first && the predicate from the 98 * second Descriptor to decide if an Atom should be selected. 99 */ 47 100 virtual bool predicate(std::pair<atomId_t,atom*>); 48 101 … … 52 105 }; 53 106 107 /** 108 * Union of two AtomDescriptors 109 */ 54 110 class AtomOrDescriptor_impl : public AtomDescriptor_impl 55 111 { … … 57 113 AtomOrDescriptor_impl(AtomDescriptor::impl_ptr _lhs, AtomDescriptor::impl_ptr _rhs); 58 114 virtual ~AtomOrDescriptor_impl(); 115 116 /** 117 * This predicate uses the predicate form the first || the predicate from the 118 * second Descriptor to decide if an Atom should be selected. 119 */ 59 120 virtual bool predicate(std::pair<atomId_t,atom*>); 60 121 … … 64 125 }; 65 126 127 /** 128 * Set Inversion of a Descriptor 129 */ 66 130 class AtomNotDescriptor_impl : public AtomDescriptor_impl 67 131 { … … 70 134 virtual ~AtomNotDescriptor_impl(); 71 135 136 /** 137 * Opposite of the given descriptor predicate. 138 */ 72 139 virtual bool predicate(std::pair<atomId_t,atom*>); 73 140 -
src/Patterns/Observer.hpp
ra1510d rdbb474 30 30 class Observable; 31 31 32 /** 33 * An Observer is notified by all Observed objects, when anything changes. 34 * 35 * If a simple change is done to an Object the Obervable will call the update() method 36 * of all signed on observers, passing itself as a parameter for identification. The 37 * Observers should then react to the changes and update themselves accordingly. 38 * 39 * If an observed Object is destroyed it will call the subjectKilled() method 40 * of all signed on Observers, again passing itself as a parameter for identification. 41 * The Observers should handle the destruction of an observed Object gracefully, i.e. 42 * set themselves inactive, display something else, etc. There is no need 43 * to sign of from the dying object, since this will be handled by the Observable destructor. 44 */ 32 45 class Observer 33 46 { … … 38 51 39 52 protected: 53 /** 54 * This method is called upon changes of the Observable 55 */ 40 56 virtual void update(Observable *publisher)=0; 57 58 /** 59 * This method is called when the observed object is destroyed. 60 */ 41 61 virtual void subjectKilled(Observable *publisher)=0; 42 62 }; 43 63 64 /** 65 * An Observable implements all neccessary method for being observed. 66 * 67 * That is, it provides methods for signing on and of from an 68 * Observable that can be used by any observer. The actual 69 * observer-mechanism is handled at a central static place 70 * to avoid memory issues when many observable are around but only few 71 * are actually observed. 72 */ 44 73 class Observable : public Observer { 45 74 public: … … 47 76 virtual ~Observable(); 48 77 78 /** 79 * Sign an Observer on to this Observable. The Observer will be notified 80 * whenever something inside the Observable changes. The Observer can 81 * assign itself a priority for the changes in the range of -20:+20. 82 * The Observer with lower priority will be called before the others, 83 * same as with Unix nice-levels. This can be used when an Object 84 * contains other objects that observe it (derived values), and these objects have 85 * to recalculate their states before the changes should be propageted to the 86 * UI. A default priority of 0 should be fine in most cases, since there is 87 * ussually no need to order the update sequence. 88 */ 49 89 virtual void signOn(Observer *target, int priority=0); 90 91 /** 92 * Sign of a previously signed on Observer. After this no more 93 * updates will be recieved from that observer. 94 */ 50 95 virtual void signOff(Observer *target); 51 96 … … 76 121 // Structure for RAII-Style notification 77 122 protected: 123 /** 124 * This structure implements the Observer-mechanism RAII-Idiom. 125 * It triggers certain functions on creation and destruction so that 126 * Observer mechanisms can be linked to scope block. 127 */ 78 128 class _Observable_protector { 79 129 public: -
src/UIElements/MainWindow.hpp
ra1510d rdbb474 25 25 }; 26 26 27 /** 28 * The type of menuPopulators 29 */ 27 30 typedef void (*MenuMaker)(Menu*,MoleculeListClass*, config*, periodentafel*); 28 31 32 /** 33 * This contains all Functions that are used to create the menus. 34 * Needs a specific funtion for each menu. All populators will be called 35 * by the UIFactory upon creation of the main menu. Thus the actuall construction 36 * of the Menus can be kept independent of the concrete type of UI that is being 37 * built. 38 */ 29 39 struct menuPopulaters{ 30 40 MenuMaker MakeEditMoleculesMenu; -
src/UIElements/UIFactory.hpp
ra1510d rdbb474 17 17 18 18 struct menuPopulaters; 19 19 /** 20 * Abstract Factory to create any kind of User interface object needed by the programm. 21 * 22 * The factory can be created and has to be set to a certain type upon creation. It will then 23 * only create UIelements of that certain type, so that all UIElements match. This way different 24 * UIs can be handled in a concise abstract way. 25 */ 20 26 class UIFactory 21 27 { … … 25 31 virtual ~UIFactory(); 26 32 27 // methods for creating UIElements 33 /** 34 * Produce some kind of main window, of whichever type was chosen when the factory was created 35 */ 28 36 virtual MainWindow* makeMainWindow(menuPopulaters,MoleculeListClass *, config *, periodentafel *, char *)=0; 37 38 /** 39 * Produce a User Interaction Dialog, that can query values from the User. 40 * Again the type is determined upon factory creation. 41 */ 29 42 virtual Dialog* makeDialog()=0; 30 43 … … 37 50 38 51 public: 52 /** 53 * create a Factory of a certain type. From that moment on only those UIElements can be produced by the factory 54 */ 39 55 static void makeUserInterface(InterfaceTypes type); 56 57 /** 58 * get the previously created factory 59 */ 40 60 static UIFactory* get(); 61 62 /** 63 * Destroy the created factory. 64 * 65 * Make sure that all UIElements that were created by the factory are destroyed before calling this method. 66 */ 41 67 static void purgeInstance(); 42 68 };
Note:
See TracChangeset
for help on using the changeset viewer.