Ignore:
Timestamp:
Oct 18, 2009, 2:51:38 PM (16 years ago)
Author:
Frederik Heber <heber@…>
Children:
77894f
Parents:
b0ee98
git-author:
Frederik Heber <heber@…> (10/18/09 14:15:37)
git-committer:
Frederik Heber <heber@…> (10/18/09 14:51:38)
Message:

Huge refactoring: molecule::ListOfBondsPerAtom and molecule::NumberOfBondsPerAtom removed, atom::ListOfBonds introduced. Unit Test for ListOfBonds manipulation introduced.

  • changes to builder.cpp: removed CreateListOfBondsPerAtom() calls, as the creation of the global arrays is not necessary anymore
  • changes to LinkedCell: LinkedCell::CheckBounds(int[NDIM]) does not admonish out of bonds as this is not desired for the local offset which may become out of bounds.
  • changes to lists.hpp templates: BUGFIX: unlink() now sets ->next and ->previous to NULL, cleanup() uses removedwithoutcheck()
  • new templates for molecule.hpp: SumPerAtom() allows for summation of the return value of atom:...() member fiunctions. This is needed e.g. for atom::CorrectBondDegree()

Signed-off-by: Frederik Heber <heber@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • molecuilder/src/molecule_template.hpp

    rb0ee98 r872b51  
    153153};
    154154
     155// ========================= Summing over each Atoms =================================== //
     156
     157// zero arguments
     158template <typename res> res molecule::SumPerAtom(res (atom::*f)() )
     159{
     160  res result = 0;
     161  atom *Walker = start;
     162  while (Walker->next != end) {
     163    Walker = Walker->next;
     164    result += (Walker->*f)();
     165  }
     166  return result;
     167};
     168template <typename res> res molecule::SumPerAtom(res (atom::*f)() const )
     169{
     170  res result = 0;
     171  atom *Walker = start;
     172  while (Walker->next != end) {
     173    Walker = Walker->next;
     174    result += (Walker->*f)();
     175  }
     176  return result;
     177};
     178template <typename res> res molecule::SumPerAtom(res (atom::*f)() ) const
     179{
     180  res result = 0;
     181  atom *Walker = start;
     182  while (Walker->next != end) {
     183    Walker = Walker->next;
     184    result += (Walker->*f)();
     185  }
     186  return result;
     187};
     188template <typename res> res molecule::SumPerAtom(res (atom::*f)() const ) const
     189{
     190  res result = 0;
     191  atom *Walker = start;
     192  while (Walker->next != end) {
     193    Walker = Walker->next;
     194    result += (Walker->*f)();
     195  }
     196  return result;
     197};
     198// one argument
     199template <typename T, typename res> res molecule::SumPerAtom(res (atom::*f)(T), T t )
     200{
     201  res result = 0;
     202  atom *Walker = start;
     203  while (Walker->next != end) {
     204    Walker = Walker->next;
     205    result += (Walker->*f)(t);
     206  }
     207  return result;
     208};
     209template <typename T, typename res> res molecule::SumPerAtom(res (atom::*f)(T) const, T t )
     210{
     211  res result = 0;
     212  atom *Walker = start;
     213  while (Walker->next != end) {
     214    Walker = Walker->next;
     215    result += (Walker->*f)(t);
     216  }
     217  return result;
     218};
     219template <typename T, typename res> res molecule::SumPerAtom(res (atom::*f)(T), T t ) const
     220{
     221  res result = 0;
     222  atom *Walker = start;
     223  while (Walker->next != end) {
     224    Walker = Walker->next;
     225    result += (Walker->*f)(t);
     226  }
     227  return result;
     228};
     229template <typename T, typename res> res molecule::SumPerAtom(res (atom::*f)(T) const, T t ) const
     230{
     231  res result = 0;
     232  atom *Walker = start;
     233  while (Walker->next != end) {
     234    Walker = Walker->next;
     235    result += (Walker->*f)(t);
     236  }
     237  return result;
     238};
     239
     240
    155241// ================== Acting with each Atoms on same molecule ========================== //
    156242
Note: See TracChangeset for help on using the changeset viewer.