Changeset 35f587 for src


Ignore:
Timestamp:
Jun 26, 2012, 7:51:04 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:
7670865
Parents:
f0834d
git-author:
Frederik Heber <heber@…> (02/06/12 09:33:27)
git-committer:
Frederik Heber <heber@…> (06/26/12 07:51:04)
Message:

FragmentResult is now also encapsulated in boost::shared_ptr.

  • this allows in the same way to have different implementations of an abstract FragmentResult class.
Location:
src/Fragmentation/Automation
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • src/Fragmentation/Automation/Controller/Commands/SendResultsOperation.cpp

    rf0834d r35f587  
    112112 * \return vector of results for the added jobs (\sa addJobs()).
    113113 */
    114 std::vector<FragmentResult> SendResultsOperation::getResults()
     114std::vector<FragmentResult::ptr> SendResultsOperation::getResults()
    115115{
    116116  Info info(__FUNCTION__);
  • src/Fragmentation/Automation/Controller/Commands/SendResultsOperation.hpp

    rf0834d r35f587  
    4343
    4444  /// Getter for results
    45   std::vector<FragmentResult> getResults();
     45  std::vector<FragmentResult::ptr> getResults();
    4646
    4747protected:
    4848  /// bunch of results
    49   std::vector<FragmentResult> results;
     49  std::vector<FragmentResult::ptr> results;
    5050};
    5151
  • src/Fragmentation/Automation/FragmentQueue.cpp

    rf0834d r35f587  
    2424#include "CodePatterns/Assert.hpp"
    2525
    26 FragmentResult FragmentQueue::NoResult(-1);
    27 FragmentResult FragmentQueue::NoResultQueued(-2);
    28 FragmentResult FragmentQueue::ResultDelivered(-3);
     26FragmentResult::ptr FragmentQueue::NoResult( new FragmentResult(-1) );
     27FragmentResult::ptr FragmentQueue::NoResultQueued( new FragmentResult(-2) );
     28FragmentResult::ptr FragmentQueue::ResultDelivered( new FragmentResult(-3) );
    2929
    3030/** Constructor for class FragmentQueue.
     
    106106 * @return true - result is a present, valid result, false - result is one of the statics
    107107 */
    108 bool FragmentQueue::isPresentResult(const FragmentResult &_result) const
     108bool FragmentQueue::isPresentResult(const FragmentResult::ptr result) const
    109109{
    110   return (_result != NoResult)
    111       && (_result != NoResultQueued)
    112       && (_result != ResultDelivered);
     110  return (*result != *NoResult)
     111      && (*result != *NoResultQueued)
     112      && (*result != *ResultDelivered);
    113113}
    114114
     
    134134  for (ResultMap::const_iterator iter = results.begin();
    135135      iter != results.end(); ++iter)
    136     if ((iter->second != NoResult)
    137         && (iter->second != NoResultQueued)
    138         && (iter->second != ResultDelivered))
     136    if (isPresentResult(iter->second))
    139137      ++doneJobs;
    140138    return doneJobs;
     
    148146 * \return result for job of given \a jobid
    149147 */
    150 FragmentResult FragmentQueue::getResult(JobId_t jobid)
     148FragmentResult::ptr FragmentQueue::getResult(JobId_t jobid)
    151149{
    152150  ResultMap::iterator iter = results.find(jobid);
    153151  ASSERT(iter != results.end(),
    154152      "FragmentQueue::pushResult() - job "+toString(jobid)+" is not known to us.");
    155   ASSERT(iter->second != NoResult,
     153  ASSERT(*iter->second != *NoResult,
    156154      "FragmentQueue::pushResult() - job "+toString(jobid)+" has not been request for calculation yet.");
    157   ASSERT(iter->second != NoResultQueued,
     155  ASSERT(*iter->second != *NoResultQueued,
    158156      "FragmentQueue::pushResult() - job "+toString(jobid)+"'s calculation is underway but not result has arrived yet.");
    159   ASSERT(iter->second != ResultDelivered,
     157  ASSERT(*iter->second != *ResultDelivered,
    160158      "FragmentQueue::pushResult() - job "+toString(jobid)+"'s result has already been delivered.");
    161159  /// store result
    162   FragmentResult _result = iter->second;
     160  FragmentResult::ptr _result = iter->second;
    163161  /// mark as delivered in map
    164162  iter->second = ResultDelivered;
     
    167165}
    168166
    169 std::vector<FragmentResult> FragmentQueue::getAllResults()
     167std::vector<FragmentResult::ptr> FragmentQueue::getAllResults()
    170168{
    171   std::vector<FragmentResult> returnresults;
     169  std::vector<FragmentResult::ptr> returnresults;
    172170  for (ResultMap::iterator iter = results.begin();
    173171      iter != results.end(); ++iter) {
     
    187185 * \param result result of job to store
    188186 */
    189 void FragmentQueue::pushResult(FragmentResult &_result)
     187void FragmentQueue::pushResult(FragmentResult::ptr &_result)
    190188{
    191189  /// check for presence
    192   ResultMap::iterator iter = results.find(_result.getId());
     190  ResultMap::iterator iter = results.find(_result->getId());
    193191  ASSERT(iter != results.end(),
    194       "FragmentQueue::pushResult() - job "+toString(_result.getId())+" is not known to us.");
    195   ASSERT(iter->second == NoResultQueued,
    196       "FragmentQueue::pushResult() - is not waiting for the result of job "+toString(_result.getId())+".");
     192      "FragmentQueue::pushResult() - job "+toString(_result->getId())+" is not known to us.");
     193  ASSERT(*iter->second == *NoResultQueued,
     194      "FragmentQueue::pushResult() - is not waiting for the result of job "+toString(_result->getId())+".");
    197195  /// and overwrite NoResult in found entry
    198196  iter->second = _result;
  • src/Fragmentation/Automation/FragmentQueue.hpp

    rf0834d r35f587  
    4343  // querying for results
    4444  bool isResultPresent(JobId_t jobid) const;
    45   FragmentResult getResult(JobId_t jobid);
    46   void pushResult(FragmentResult &_result);
    47   std::vector<FragmentResult> getAllResults();
     45  FragmentResult::ptr getResult(JobId_t jobid);
     46  void pushResult(FragmentResult::ptr &result);
     47  std::vector<FragmentResult::ptr> getAllResults();
    4848
    4949  size_t getDoneJobs() const;
    5050
    5151private:
    52   bool isPresentResult(const FragmentResult &_result) const;
     52  bool isPresentResult(const FragmentResult::ptr result) const;
    5353
    5454  //!> result that takes place in ResultQueue after job has arrived before it has been popped.
    55   static FragmentResult NoResult;
     55  static FragmentResult::ptr NoResult;
    5656  //!> result that takes place in ResultQueue until real result has arrived.
    57   static FragmentResult NoResultQueued;
     57  static FragmentResult::ptr NoResultQueued;
    5858  //!> result that takes place in ResultQueue after real result has been delivered.
    59   static FragmentResult ResultDelivered;
     59  static FragmentResult::ptr ResultDelivered;
    6060
    6161  typedef std::deque<FragmentJob::ptr> JobQueue;
    62   typedef std::map<JobId_t, FragmentResult> ResultMap;
     62  typedef std::map<JobId_t, FragmentResult::ptr> ResultMap;
    6363
    6464  //!> queue for all jobs
  • src/Fragmentation/Automation/FragmentResult.hpp

    rf0834d r35f587  
    1717#include <string>
    1818
    19 #include "boost/serialization/array.hpp"
     19#include <boost/shared_ptr.hpp>
     20#include <boost/serialization/array.hpp>
     21#include <boost/serialization/shared_ptr.hpp>
    2022
    2123#include "JobId.hpp"
     
    3537  friend class FragmentResultTest;
    3638public:
     39  typedef boost::shared_ptr<FragmentResult> ptr;
     40
    3741  FragmentResult(const JobId_t id);
    3842  FragmentResult(const JobId_t id, const std::string _result);
  • src/Fragmentation/Automation/FragmentScheduler.cpp

    rf0834d r35f587  
    5656      boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), controllerport)
    5757  ),
    58   result(JobId::NoJob),
     58  result( new FragmentResult(JobId::NoJob) ),
    5959  choice(NoOperation),
    6060  Exitflag(OkFlag)
     
    177177{
    178178  Info info(__FUNCTION__);
    179   LOG(1, "INFO: Received result for job #" << result.getId() << " ...");
    180   ASSERT(result.getId() != (JobId_t)JobId::NoJob,
     179  LOG(1, "INFO: Received result for job #" << result->getId() << " ...");
     180  // and push into queue
     181  ASSERT(result->getId() != (JobId_t)JobId::NoJob,
    181182      "FragmentScheduler::handle_ReceiveResultFromWorker() - result received has NoJob id.");
    182   ASSERT(result.getId() != (JobId_t)JobId::IllegalJob,
     183  ASSERT(result->getId() != (JobId_t)JobId::IllegalJob,
    183184      "FragmentScheduler::handle_ReceiveResultFromWorker() - result received has IllegalJob id.");
    184185  // place id into expected
    185   if ((result.getId() != (JobId_t)JobId::NoJob) && (result.getId() != (JobId_t)JobId::IllegalJob))
     186  if ((result->getId() != (JobId_t)JobId::NoJob) && (result->getId() != (JobId_t)JobId::IllegalJob))
    186187    JobsQueue.pushResult(result);
    187188  // erase result
    188   result = FragmentResult(JobId::NoJob);
     189  result.reset();
    189190  LOG(1, "INFO: JobsQueue has " << JobsQueue.getDoneJobs() << " results.");
    190191}
     
    259260    case SendResults:
    260261    {
    261       const std::vector<FragmentResult> results = JobsQueue.getAllResults();
     262      const std::vector<FragmentResult::ptr> results = JobsQueue.getAllResults();
    262263      // ... or we give the results
    263264      LOG(1, "INFO: Sending "+toString(results.size())+" results to controller ...");
  • src/Fragmentation/Automation/FragmentScheduler.hpp

    rf0834d r35f587  
    9191
    9292  /// result that is received from the client.
    93   FragmentResult result;
     93  FragmentResult::ptr result;
    9494
    9595  /// bunch of jobs received from controller before placed in JobsQueue
  • src/Fragmentation/Automation/FragmentWorker.cpp

    rf0834d r35f587  
    3737#include "FragmentWorker.hpp"
    3838
    39 FragmentResult FragmentWorker::EmptyResult(JobId::NoJob, std::string("EmptyResult"));
     39FragmentResult::ptr FragmentWorker::EmptyResult( new FragmentResult(JobId::NoJob, std::string("EmptyResult")) );
    4040
    4141/// Constructor starts the asynchronous connect operation.
     
    107107      // do something .. right now: wait
    108108      LOG(1, "INFO: Calculating job #" << job->getId() << " ...");
    109       FragmentResult result(job->Work());
     109      FragmentResult::ptr result(job->Work());
    110110
    111111      // write the result to the server
  • src/Fragmentation/Automation/FragmentWorker.hpp

    rf0834d r35f587  
    5656private:
    5757  // static entity of an empty result
    58   static FragmentResult EmptyResult;
     58  static FragmentResult::ptr EmptyResult;
    5959
    6060  /// The Connection to the server.
  • src/Fragmentation/Automation/Jobs/FragmentJob.cpp

    rf0834d r35f587  
    6464 * \return result of this job
    6565 */
    66 FragmentResult FragmentJob::Work()
     66FragmentResult::ptr FragmentJob::Work()
    6767{
    6868  Info info((std::string(__FUNCTION__)+std::string(", id #")+toString(getId())).c_str());
    69   FragmentResult s(getId());
     69  FragmentResult::ptr s( new FragmentResult(getId()) );
    7070
    7171  // write outputfile to file
     
    8080
    8181  // fork into subprocess and launch command
    82   s.exitflag = std::system((command+std::string(" ")+inputfilename
     82  s->exitflag = std::system((command+std::string(" ")+inputfilename
    8383                        +std::string(" >")+outputfilename).c_str());
    8484  std::ifstream resultfile;
     
    8787  while (resultfile.good()) {
    8888    resultfile.getline(line, 1023);
    89     s.result += line;
     89    s->result += line;
    9090  }
    9191  resultfile.close();
  • src/Fragmentation/Automation/Jobs/FragmentJob.hpp

    rf0834d r35f587  
    4747  ~FragmentJob();
    4848
    49   FragmentResult Work();
     49  FragmentResult::ptr Work();
    5050
    5151  bool operator==(const FragmentJob &other) const;
  • src/Fragmentation/Automation/controller.cpp

    rf0834d r35f587  
    9898  SendResultsOperation *sendres = static_cast<SendResultsOperation *>(
    9999      controller.Commands.getByName("sendresults"));
    100   std::vector<FragmentResult> results = sendres->getResults();
    101   for (std::vector<FragmentResult>::const_iterator iter = results.begin();
     100  std::vector<FragmentResult::ptr> results = sendres->getResults();
     101  for (std::vector<FragmentResult::ptr>::const_iterator iter = results.begin();
    102102      iter != results.end(); ++iter)
    103     LOG(1, "RESULT: job #"+toString((*iter).getId())+": "+toString((*iter).result));
     103    LOG(1, "RESULT: job #"+toString((*iter)->getId())+": "+toString((*iter)->result));
    104104}
    105105
  • src/Fragmentation/Automation/unittests/FragmentJobUnitTest.cpp

    rf0834d r35f587  
    8282  FragmentJob::ptr othertestJob(new FragmentJob(command, outputfile, 2));
    8383
    84   FragmentResult testResult(testJob->Work());
    85   FragmentResult othertestResult(othertestJob->Work());
     84  FragmentResult::ptr testResult(testJob->Work());
     85  FragmentResult::ptr othertestResult(othertestJob->Work());
    8686
    87   CPPUNIT_ASSERT_EQUAL( (JobId_t)1, testResult.getId() );
    88   CPPUNIT_ASSERT_EQUAL( (JobId_t)2, othertestResult.getId() );
     87  CPPUNIT_ASSERT_EQUAL( (JobId_t)1, testResult->getId() );
     88  CPPUNIT_ASSERT_EQUAL( (JobId_t)2, othertestResult->getId() );
    8989}
    9090
  • src/Fragmentation/Automation/unittests/FragmentQueueUnitTest.cpp

    rf0834d r35f587  
    189189
    190190  // prepare a result
    191   FragmentResult testResult(1);
    192   FragmentResult wrongIdResult(2);
     191  FragmentResult::ptr testResult( new FragmentResult(1) );
     192  FragmentResult::ptr wrongIdResult( new FragmentResult(2) );
    193193
    194194  // check that none are present and we can't get result yet
     
    257257  // check that no results are returned.
    258258  {
    259     const std::vector<FragmentResult> results = queue->getAllResults();
     259    const std::vector<FragmentResult::ptr> results = queue->getAllResults();
    260260    CPPUNIT_ASSERT_EQUAL( (size_t)0, results.size() );
    261261  }
     
    271271
    272272  // prepare a result
    273   FragmentResult testResult(1);
    274   FragmentResult anothertestResult(2);
     273  FragmentResult::ptr testResult( new FragmentResult(1) );
     274  FragmentResult::ptr anothertestResult( new FragmentResult(2) );
    275275
    276276  // push correct result
     
    285285  // check that two results are returned.
    286286  {
    287     const std::vector<FragmentResult> results = queue->getAllResults();
     287    const std::vector<FragmentResult::ptr> results = queue->getAllResults();
    288288    CPPUNIT_ASSERT_EQUAL( (size_t)2, results.size() );
    289289  }
Note: See TracChangeset for help on using the changeset viewer.