Ignore:
Timestamp:
May 7, 2008, 1:38:13 PM (17 years ago)
Author:
Frederik Heber <heber@…>
Children:
a01955
Parents:
417bb5
Message:

AtomStackClass -> template <typename T> StackClass<T> change in new file stackclass.hpp, other templates to helpers.hpp

StackClass was changed to a template and as template code may only be present in header file was moved to a new
header file stackclass.hpp. New file was added to Makefile.am
Other templates (list management et al) were moved to helpers.hpp as they are more sensibly placed there.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • molecuilder/src/helpers.hpp

    r417bb5 rd50d2a  
    5959char *FixedDigitNumber(const int FragmentNumber, const int digits);
    6060
    61 /********************************************** helpful structures *********************************/
     61/********************************************** helpful template functions *********************************/
     62
     63/******************************** Some templates for list management ***********************************/
     64
     65/** Adds linking of an item to a list.
     66 * \param *walker
     67 * \return true - adding succeeded, false - error in list
     68 */
     69template <typename X> void link(X *walker, X *end)
     70{
     71  X *vorher = end->previous;
     72  if (vorher != NULL)
     73    vorher->next = walker;
     74  end->previous = walker;
     75  walker->previous = vorher;
     76  walker->next = end;
     77};
     78
     79/** Removes linking of an item in a list.
     80 * \param *walker
     81 * \return true - removing succeeded, false - given item not found in list
     82 */
     83template <typename X> void unlink(X *walker)
     84{
     85  if (walker->next != NULL)
     86    walker->next->previous = walker->previous;
     87  if (walker->previous != NULL)
     88    walker->previous->next = walker->next;
     89};
     90
     91/** Adds new item before an item \a *end in a list.
     92 * \param *pointer   item to be added
     93 * \param *end  end of list
     94 * \return true - addition succeeded, false - unable to add item to list
     95 */
     96template <typename X>  bool add(X *pointer, X *end)
     97{
     98  if (end != NULL) {
     99    link(pointer, end);
     100  } else {
     101    pointer->previous = NULL;
     102    pointer->next = NULL;
     103  }
     104  return true;
     105};
     106
     107/** Finds item in list
     108 * \param *suche  search criteria
     109 * \param *start  begin of list
     110 * \param *end  end of list
     111 * \return X - if found, NULL - if not found
     112 */
     113template <typename X, typename Y> X * find(Y *suche, X *start, X *end)
     114{
     115  X *walker = start;
     116  while (walker->next != end) { // go through list
     117    walker = walker->next; // step onward beforehand
     118    if (*walker->sort == *suche) return (walker);
     119  }
     120  return NULL;
     121};
     122
     123/** Removes an item from the list without check.
     124 * \param *walker item to be removed
     125 * \return true - removing succeeded, false - given item not found in list
     126 */
     127template <typename X> void removewithoutcheck(X *walker)
     128{
     129  if (walker != NULL) {
     130    unlink(walker);
     131    delete(walker);
     132    walker = NULL;
     133  }
     134};
     135
     136/** Removes an item from the list, checks if exists.
     137 * Checks beforehand if atom is really within molecule list.
     138 * \param *pointer   item to be removed
     139 * \param *start  begin of list
     140 * \param *end  end of list
     141 * \return true - removing succeeded, false - given item not found in list
     142 */
     143template <typename X> bool remove(X *pointer, X *start, X *end)
     144{
     145  X *walker = find (pointer->sort, start, end);
     146/*  while (walker->next != pointer) { // search through list
     147    walker = walker->next;
     148    if (walker == end) return false;  // item not found in list
     149  }*/
     150  // atom found, now unlink
     151  if (walker != NULL)
     152    removewithoutcheck(walker);
     153  else
     154    return false;
     155  return true;
     156};
     157
     158/** Cleans the whole list.
     159 * \param *start begin of list
     160 * \param *end end of list
     161 * \return true - list was cleaned successfully, false - error in list structure
     162 */
     163template <typename X> bool cleanup(X *start, X *end)
     164{
     165  X *pointer = start->next;
     166  X *walker;
     167  while (pointer != end) { // go through list
     168    walker = pointer; // mark current
     169    pointer = pointer->next; // step onward beforehand
     170    // remove walker
     171    unlink(walker);
     172    delete(walker);
     173    walker = NULL;
     174  }
     175  return true;
     176};
     177
     178/** Returns the first marker in a chain list.
     179 * \param *me one arbitrary item in chain list
     180 * \return poiner to first marker
     181 */
     182template <typename X> X *GetFirst(X *me)
     183{
     184  X *Binder = me;
     185  while(Binder->previous != NULL)
     186    Binder = Binder->previous;
     187  return Binder;
     188};
     189
     190/** Returns the last marker in a chain list.
     191 * \param *me one arbitrary item in chain list
     192 * \return poiner to last marker
     193 */
     194template <typename X> X *GetLast(X *me)
     195{
     196  X *Binder = me;
     197  while(Binder->next != NULL)
     198    Binder = Binder->next;
     199  return Binder;
     200};
     201
     202/** Frees a two-dimensional array.
     203 * \param *ptr pointer to array
     204 * \param dim first dim of array
     205 */
     206template <typename X> void Free2DArray(X **ptr, int dim)
     207{
     208  int i;
     209  if (ptr != NULL) {
     210    for(i=0;i<dim;i++)
     211      if (ptr[i] != NULL)
     212        free(ptr[i]);
     213    free(ptr);
     214  }
     215};
    62216
    63217/************************************* Class Verbose & Binary *******************************/
Note: See TracChangeset for help on using the changeset viewer.