Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/helpers.hpp

    r6ac7ee r042f82  
    3838
    3939/* Behandelt aufgetretene Fehler. error ist der Fehlertyp(enum Errors)
    40         void *SpecialData ist ein untypisierter Zeiger auf Spezielle Daten zur Fehlerbehandlung.
    41         Man koennte auch noch einen Zeiger auf eine Funktion uebergeben */
     40  void *SpecialData ist ein untypisierter Zeiger auf Spezielle Daten zur Fehlerbehandlung.
     41  Man koennte auch noch einen Zeiger auf eine Funktion uebergeben */
    4242extern void /*@exits@*/ debug(const char *output);
    43         //__attribute__ ((__return__));
     43  //__attribute__ ((__return__));
    4444#define debug(data) debug_in((data), __FILE__, __LINE__)
    4545
    4646extern void /*@exits@*/ debug_in(const char *output,
    47                 const char *file, const int line);
    48         //__attribute__ ((__return__));
     47    const char *file, const int line);
     48  //__attribute__ ((__return__));
    4949
    5050double ask_value(const char *text);
     
    7373template <typename T> bool CreateFatherLookupTable(ofstream *out, T *start, T *end, T **&LookupTable, int count = 0)
    7474{
    75         bool status = true;
    76         T *Walker = NULL;
    77         int AtomNo;
    78 
    79         if (LookupTable != NULL) {
    80                 *out << "Pointer for Lookup table is not NULL! Aborting ..." <<endl;
    81                 return false;
    82         }
    83 
    84         // count them
    85         if (count == 0) {
    86                 Walker = start;
    87                 while (Walker->next != end) { // create a lookup table (Atom::nr -> atom) used as a marker table lateron
    88                         Walker = Walker->next;
    89                         count = (count < Walker->GetTrueFather()->nr) ? Walker->GetTrueFather()->nr : count;
    90                 }
    91         }
    92         if (count <= 0) {
    93                 *out << "Count of lookup list is 0 or less." << endl;
    94                 return false;
    95         }
    96 
    97         // allocat and fill
    98         LookupTable = (T **) Malloc(sizeof(T *)*count, "CreateFatherLookupTable - **LookupTable");
    99         if (LookupTable == NULL) {
    100                 cerr << "LookupTable memory allocation failed!" << endl;
    101                 status = false;
    102         } else {
    103                 for (int i=0;i<count;i++)
    104                         LookupTable[i] = NULL;
    105                 Walker = start;
    106                 while (Walker->next != end) { // create a lookup table (Atom::nr -> atom) used as a marker table lateron
    107                         Walker = Walker->next;
    108                         AtomNo = Walker->GetTrueFather()->nr;
    109                         if ((AtomNo >= 0) && (AtomNo < count)) {
    110                                 //*out << "Setting LookupTable[" << AtomNo << "] to " << *Walker << endl;
    111                                 LookupTable[AtomNo] = Walker;
    112                         } else {
    113                                 *out << "Walker " << *Walker << " exceeded range of nuclear ids [0, " << count << ")." << endl;
    114                                 status = false;
    115                                 break;
    116                         }
    117                 }
    118         }
    119 
    120         return status;
     75  bool status = true;
     76  T *Walker = NULL;
     77  int AtomNo;
     78
     79  if (LookupTable != NULL) {
     80    *out << "Pointer for Lookup table is not NULL! Aborting ..." <<endl;
     81    return false;
     82  }
     83
     84  // count them
     85  if (count == 0) {
     86    Walker = start;
     87    while (Walker->next != end) { // create a lookup table (Atom::nr -> atom) used as a marker table lateron
     88      Walker = Walker->next;
     89      count = (count < Walker->GetTrueFather()->nr) ? Walker->GetTrueFather()->nr : count;
     90    }
     91  }
     92  if (count <= 0) {
     93    *out << "Count of lookup list is 0 or less." << endl;
     94    return false;
     95  }
     96
     97  // allocat and fill
     98  LookupTable = (T **) Malloc(sizeof(T *)*count, "CreateFatherLookupTable - **LookupTable");
     99  if (LookupTable == NULL) {
     100    cerr << "LookupTable memory allocation failed!" << endl;
     101    status = false;
     102  } else {
     103    for (int i=0;i<count;i++)
     104      LookupTable[i] = NULL;
     105    Walker = start;
     106    while (Walker->next != end) { // create a lookup table (Atom::nr -> atom) used as a marker table lateron
     107      Walker = Walker->next;
     108      AtomNo = Walker->GetTrueFather()->nr;
     109      if ((AtomNo >= 0) && (AtomNo < count)) {
     110        //*out << "Setting LookupTable[" << AtomNo << "] to " << *Walker << endl;
     111        LookupTable[AtomNo] = Walker;
     112      } else {
     113        *out << "Walker " << *Walker << " exceeded range of nuclear ids [0, " << count << ")." << endl;
     114        status = false;
     115        break;
     116      }
     117    }
     118  }
     119
     120  return status;
    121121};
    122122
     
    129129template <typename X> void link(X *walker, X *end)
    130130{
    131         X *vorher = end->previous;
    132         if (vorher != NULL)
    133                 vorher->next = walker;
    134         end->previous = walker;
    135         walker->previous = vorher;
    136         walker->next = end;
     131  X *vorher = end->previous;
     132  if (vorher != NULL)
     133    vorher->next = walker;
     134  end->previous = walker;
     135  walker->previous = vorher;
     136  walker->next = end;
    137137};
    138138
     
    143143template <typename X> void unlink(X *walker)
    144144{
    145         if (walker->next != NULL)
    146                 walker->next->previous = walker->previous;
    147         if (walker->previous != NULL)
    148                 walker->previous->next = walker->next;
     145  if (walker->next != NULL)
     146    walker->next->previous = walker->previous;
     147  if (walker->previous != NULL)
     148    walker->previous->next = walker->next;
    149149};
    150150
    151151/** Adds new item before an item \a *end in a list.
    152  * \param *pointer      item to be added
    153  * \param *end  end of list
     152 * \param *pointer  item to be added
     153 * \param *end  end of list
    154154 * \return true - addition succeeded, false - unable to add item to list
    155155 */
    156 template <typename X>   bool add(X *pointer, X *end)
    157 {
    158         if (end != NULL) {
    159                 link(pointer, end);
    160         } else {
    161                 pointer->previous = NULL;
    162                 pointer->next = NULL;
    163         }
    164         return true;
     156template <typename X>  bool add(X *pointer, X *end)
     157{
     158  if (end != NULL) {
     159    link(pointer, end);
     160  } else {
     161    pointer->previous = NULL;
     162    pointer->next = NULL;
     163  }
     164  return true;
    165165};
    166166
    167167/** Finds item in list
    168  * \param *suche        search criteria
    169  * \param *start        begin of list
    170  * \param *end  end of list
     168 * \param *suche  search criteria
     169 * \param *start  begin of list
     170 * \param *end  end of list
    171171 * \return X - if found, NULL - if not found
    172172 */
    173173template <typename X, typename Y> X * find(Y *suche, X *start, X *end)
    174174{
    175         X *walker = start;
    176         while (walker->next != end) { // go through list
    177                 walker = walker->next; // step onward beforehand
    178                 if (*walker->sort == *suche) return (walker);
    179         }
    180         return NULL;
     175  X *walker = start;
     176  while (walker->next != end) { // go through list
     177    walker = walker->next; // step onward beforehand
     178    if (*walker->sort == *suche) return (walker);
     179  }
     180  return NULL;
    181181};
    182182
     
    187187template <typename X> void removewithoutcheck(X *walker)
    188188{
    189         if (walker != NULL) {
    190                 unlink(walker);
    191                 delete(walker);
    192                 walker = NULL;
    193         }
     189  if (walker != NULL) {
     190    unlink(walker);
     191    delete(walker);
     192    walker = NULL;
     193  }
    194194};
    195195
    196196/** Removes an item from the list, checks if exists.
    197197 * Checks beforehand if atom is really within molecule list.
    198  * \param *pointer      item to be removed
    199  * \param *start        begin of list
    200  * \param *end  end of list
     198 * \param *pointer  item to be removed
     199 * \param *start  begin of list
     200 * \param *end  end of list
    201201 * \return true - removing succeeded, false - given item not found in list
    202202 */
    203203template <typename X> bool remove(X *pointer, X *start, X *end)
    204204{
    205         X *walker = find (pointer->sort, start, end);
    206 /*      while (walker->next != pointer) { // search through list
    207                 walker = walker->next;
    208                 if (walker == end) return false;        // item not found in list
    209         }*/
    210         // atom found, now unlink
    211         if (walker != NULL)
    212                 removewithoutcheck(walker);
    213         else
    214                 return false;
    215         return true;
     205  X *walker = find (pointer->sort, start, end);
     206/*  while (walker->next != pointer) { // search through list
     207    walker = walker->next;
     208    if (walker == end) return false;  // item not found in list
     209  }*/
     210  // atom found, now unlink
     211  if (walker != NULL)
     212    removewithoutcheck(walker);
     213  else
     214    return false;
     215  return true;
    216216};
    217217
     
    223223template <typename X> bool cleanup(X *start, X *end)
    224224{
    225         X *pointer = start->next;
    226         X *walker;
    227         while (pointer != end) { // go through list
    228                 walker = pointer; // mark current
    229                 pointer = pointer->next; // step onward beforehand
    230                 // remove walker
    231                 unlink(walker);
    232                 delete(walker);
    233                 walker = NULL;
    234         }
    235         return true;
     225  X *pointer = start->next;
     226  X *walker;
     227  while (pointer != end) { // go through list
     228    walker = pointer; // mark current
     229    pointer = pointer->next; // step onward beforehand
     230    // remove walker
     231    unlink(walker);
     232    delete(walker);
     233    walker = NULL;
     234  }
     235  return true;
    236236};
    237237
     
    242242template <typename X> X *GetFirst(X *me)
    243243{
    244         X *Binder = me;
    245         while(Binder->previous != NULL)
    246                 Binder = Binder->previous;
    247         return Binder;
     244  X *Binder = me;
     245  while(Binder->previous != NULL)
     246    Binder = Binder->previous;
     247  return Binder;
    248248};
    249249
     
    254254template <typename X> X *GetLast(X *me)
    255255{
    256         X *Binder = me;
    257         while(Binder->next != NULL)
    258                 Binder = Binder->next;
    259         return Binder;
     256  X *Binder = me;
     257  while(Binder->next != NULL)
     258    Binder = Binder->next;
     259  return Binder;
    260260};
    261261
     
    266266template <typename X> void Free2DArray(X **ptr, int dim)
    267267{
    268         int i;
    269         if (ptr != NULL) {
    270                 for(i=dim;i--;)
    271                         if (ptr[i] != NULL)
    272                                 free(ptr[i]);
    273                 free(ptr);
    274         }
     268  int i;
     269  if (ptr != NULL) {
     270    for(i=dim;i--;)
     271      if (ptr[i] != NULL)
     272        free(ptr[i]);
     273    free(ptr);
     274  }
    275275};
    276276
     
    281281class Verbose
    282282{
    283         public:
    284                 Verbose(int value) : Verbosity(value) { }
    285 
    286                 ostream& print (ostream &ost) const;
    287         private:
    288                 int Verbosity;
     283  public:
     284    Verbose(int value) : Verbosity(value) { }
     285
     286    ostream& print (ostream &ost) const;
     287  private:
     288    int Verbosity;
    289289};
    290290
     
    295295class Binary
    296296{
    297         public:
    298                 Binary(int value) : BinaryNumber(value) { }
    299 
    300                 ostream& print (ostream &ost) const;
    301         private:
    302                 int BinaryNumber;
     297  public:
     298    Binary(int value) : BinaryNumber(value) { }
     299
     300    ostream& print (ostream &ost) const;
     301  private:
     302    int BinaryNumber;
    303303};
    304304
Note: See TracChangeset for help on using the changeset viewer.