Ignore:
Timestamp:
Oct 9, 2009, 11:57:41 AM (16 years ago)
Author:
Frederik Heber <heber@…>
Children:
e71890
Parents:
17b3a5c
Message:

Implementing templated iterators done for molecule.cpp

File:
1 edited

Legend:

Unmodified
Added
Removed
  • molecuilder/src/molecule_template.hpp

    r17b3a5c r3efb4a  
    4545  }
    4646};
     47template <typename res> void molecule::ActOnAllVectors( res (Vector::*f)() const ) const
     48    {
     49  atom *Walker = start;
     50  while (Walker->next != end) {
     51    Walker = Walker->next;
     52    ((Walker->node)->*f)();
     53  }
     54};
    4755// one argument
    4856template <typename res, typename T> void molecule::ActOnAllVectors( res (Vector::*f)(T), T t )
     
    7078  }
    7179};
     80template <typename res, typename T> void molecule::ActOnAllVectors( res (Vector::*f)(T) const, T t ) const
     81{
     82  atom *Walker = start;
     83  while (Walker->next != end) {
     84    Walker = Walker->next;
     85    ((Walker->node)->*f)(t);
     86  }
     87};
    7288// two arguments
    7389template <typename res, typename T, typename U> void molecule::ActOnAllVectors( res (Vector::*f)(T, U), T t, U u )
     
    95111  }
    96112};
     113template <typename res, typename T, typename U> void molecule::ActOnAllVectors( res (Vector::*f)(T, U) const, T t, U u ) const
     114{
     115  atom *Walker = start;
     116  while (Walker->next != end) {
     117    Walker = Walker->next;
     118    ((Walker->node)->*f)(t, u);
     119  }
     120};
    97121// three arguments
    98122template <typename res, typename T, typename U, typename V> void molecule::ActOnAllVectors( res (Vector::*f)(T, U, V), T t, U u, V v)
     
    120144  }
    121145};
     146template <typename res, typename T, typename U, typename V> void molecule::ActOnAllVectors( res (Vector::*f)(T, U, V) const, T t, U u, V v) const
     147{
     148  atom *Walker = start;
     149  while (Walker->next != end) {
     150    Walker = Walker->next;
     151    ((Walker->node)->*f)(t, u, v);
     152  }
     153};
    122154
    123155// ================== Acting with each Atoms on same molecule ========================== //
     
    148180  }
    149181};
     182template <typename res> void molecule::ActWithEachAtom( res (molecule::*f)(atom *) const) const
     183{
     184  atom *Walker = start;
     185  while (Walker->next != end) {
     186    Walker = Walker->next;
     187    (*f)(Walker);
     188  }
     189};
    150190
    151191// ================== Acting with each Atoms on copy molecule ========================== //
     
    176216  }
    177217};
     218template <typename res> void molecule::ActOnCopyWithEachAtom( res (molecule::*f)(atom *) const, molecule *copy) const
     219{
     220  atom *Walker = start;
     221  while (Walker->next != end) {
     222    Walker = Walker->next;
     223    (copy->*f)(Walker);
     224  }
     225};
    178226
    179227// ================== Acting with each Atoms on copy molecule if true ========================== //
     
    247295  }
    248296};
     297template <typename res> void molecule::ActOnAllAtoms( res (atom::*f)() const) const
     298{
     299  atom *Walker = start;
     300  while (Walker->next != end) {
     301    Walker = Walker->next;
     302    (Walker->*f)();
     303  }
     304};
    249305// one argument
    250306template <typename res, typename T> void molecule::ActOnAllAtoms( res (atom::*f)(T), T t )
     
    264320  }
    265321};
     322template <typename res, typename T> void molecule::ActOnAllAtoms( res (atom::*f)(T), T t ) const
     323{
     324  atom *Walker = start;
     325  while (Walker->next != end) {
     326    Walker = Walker->next;
     327    (Walker->*f)(t);
     328  }
     329};
    266330template <typename res, typename T> void molecule::ActOnAllAtoms( res (atom::*f)(T) const, T t ) const
    267331{
     
    297361  }
    298362};
     363template <typename res, typename T, typename U> void molecule::ActOnAllAtoms( res (atom::*f)(T, U) const, T t, U u ) const
     364{
     365  atom *Walker = start;
     366  while (Walker->next != end) {
     367    Walker = Walker->next;
     368    (Walker->*f)(t, u);
     369  }
     370};
    299371// three argument
    300372template <typename res, typename T, typename U, typename V> void molecule::ActOnAllAtoms( res (atom::*f)(T, U, V), T t, U u, V v)
     
    322394  }
    323395};
     396template <typename res, typename T, typename U, typename V> void molecule::ActOnAllAtoms( res (atom::*f)(T, U, V) const, T t, U u, V v) const
     397{
     398  atom *Walker = start;
     399  while (Walker->next != end) {
     400    Walker = Walker->next;
     401    (Walker->*f)(t, u, v);
     402  }
     403};
    324404// four arguments
    325405template <typename res, typename T, typename U, typename V, typename W> void molecule::ActOnAllAtoms( res (atom::*f)(T, U, V, W), T t, U u, V v, W w)
     
    347427  }
    348428};
     429template <typename res, typename T, typename U, typename V, typename W> void molecule::ActOnAllAtoms( res (atom::*f)(T, U, V, W) const, T t, U u, V v, W w) const
     430{
     431  atom *Walker = start;
     432  while (Walker->next != end) {
     433    Walker = Walker->next;
     434    (Walker->*f)(t, u, v, w);
     435  }
     436};
    349437
    350438// ===================== Accesssing arrays indexed by some integer for each atom ======================
    351439
    352440// for atom ints
    353 template <typename T> void molecule::SetIndexedArrayForEachAtomTo ( T *array, int atom::*index, void (*Setor)(T *, T) )
     441template <typename T> void molecule::SetIndexedArrayForEachAtomTo ( T *array, int TesselPoint::*index, void (*Setor)(T *, T) )
    354442{
    355443  atom *Walker = start;
     
    359447  }
    360448};
    361 template <typename T> void molecule::SetIndexedArrayForEachAtomTo ( T *array, int atom::*index, void (*Setor)(T *, T), T value )
     449template <typename T> void molecule::SetIndexedArrayForEachAtomTo ( T *array, int TesselPoint::*index, void (*Setor)(T *, T), T value )
    362450{
    363451  atom *Walker = start;
     
    384472  }
    385473};
     474template <typename T> void molecule::SetIndexedArrayForEachAtomTo ( T *array, int TesselPoint::*index, T (atom::*Setor)(Vector &), Vector atom::*value )
     475{
     476  atom *Walker = start;
     477  while (Walker->next != end) {
     478    Walker = Walker->next;
     479    array[(Walker->*index)] = (Walker->*Setor) (Walker->*value);
     480  }
     481};
     482template <typename T> void molecule::SetIndexedArrayForEachAtomTo ( T *array, int TesselPoint::*index, T (atom::*Setor)(Vector &), Vector &vect )
     483{
     484  atom *Walker = start;
     485  while (Walker->next != end) {
     486    Walker = Walker->next;
     487    array[(Walker->*index)] = (Walker->*Setor) (vect);
     488  }
     489};
    386490
    387491#endif /* MOLECULE_TEMPLATE_HPP_ */
Note: See TracChangeset for help on using the changeset viewer.