Changes in src/helpers.hpp [cc2ee5:6ac7ee]
- File:
-
- 1 edited
-
src/helpers.hpp (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/helpers.hpp
rcc2ee5 r6ac7ee 1 1 /** \file helpers.hpp 2 2 * 3 * Declaration of some auxiliary functions for memory dis-/allocation and so on 3 * Declaration of some auxiliary functions for memory dis-/allocation and so on 4 4 */ 5 5 … … 38 38 39 39 /* 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 */ 42 42 extern void /*@exits@*/ debug(const char *output); 43 //__attribute__ ((__return__));43 //__attribute__ ((__return__)); 44 44 #define debug(data) debug_in((data), __FILE__, __LINE__) 45 45 46 46 extern 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__)); 49 49 50 50 double ask_value(const char *text); … … 73 73 template <typename T> bool CreateFatherLookupTable(ofstream *out, T *start, T *end, T **&LookupTable, int count = 0) 74 74 { 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 them85 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 fill98 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; 121 121 }; 122 122 … … 129 129 template <typename X> void link(X *walker, X *end) 130 130 { 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; 137 137 }; 138 138 … … 143 143 template <typename X> void unlink(X *walker) 144 144 { 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; 149 149 }; 150 150 151 151 /** Adds new item before an item \a *end in a list. 152 * \param *pointer item to be added153 * \param *end end of list152 * \param *pointer item to be added 153 * \param *end end of list 154 154 * \return true - addition succeeded, false - unable to add item to list 155 155 */ 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;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; 165 165 }; 166 166 167 167 /** Finds item in list 168 * \param *suche search criteria169 * \param *start begin of list170 * \param *end end of list168 * \param *suche search criteria 169 * \param *start begin of list 170 * \param *end end of list 171 171 * \return X - if found, NULL - if not found 172 172 */ 173 173 template <typename X, typename Y> X * find(Y *suche, X *start, X *end) 174 174 { 175 X *walker = start;176 while (walker->next != end) { // go through list177 walker = walker->next; // step onward beforehand178 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; 181 181 }; 182 182 … … 187 187 template <typename X> void removewithoutcheck(X *walker) 188 188 { 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 } 194 194 }; 195 195 196 196 /** Removes an item from the list, checks if exists. 197 197 * Checks beforehand if atom is really within molecule list. 198 * \param *pointer item to be removed199 * \param *start begin of list200 * \param *end end of list198 * \param *pointer item to be removed 199 * \param *start begin of list 200 * \param *end end of list 201 201 * \return true - removing succeeded, false - given item not found in list 202 202 */ 203 203 template <typename X> bool remove(X *pointer, X *start, X *end) 204 204 { 205 X *walker = find (pointer->sort, start, end);206 /* while (walker->next != pointer) { // search through list207 walker = walker->next;208 if (walker == end) return false;// item not found in list209 }*/210 // atom found, now unlink211 if (walker != NULL)212 removewithoutcheck(walker);213 else214 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; 216 216 }; 217 217 … … 223 223 template <typename X> bool cleanup(X *start, X *end) 224 224 { 225 X *pointer = start->next;226 X *walker;227 while (pointer != end) { // go through list228 walker = pointer; // mark current229 pointer = pointer->next; // step onward beforehand230 // remove walker231 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; 236 236 }; 237 237 … … 242 242 template <typename X> X *GetFirst(X *me) 243 243 { 244 X *Binder = me;245 while(Binder->previous != NULL)246 Binder = Binder->previous;247 return Binder;248 }; 244 X *Binder = me; 245 while(Binder->previous != NULL) 246 Binder = Binder->previous; 247 return Binder; 248 }; 249 249 250 250 /** Returns the last marker in a chain list. … … 254 254 template <typename X> X *GetLast(X *me) 255 255 { 256 X *Binder = me;257 while(Binder->next != NULL)258 Binder = Binder->next;259 return Binder;260 }; 256 X *Binder = me; 257 while(Binder->next != NULL) 258 Binder = Binder->next; 259 return Binder; 260 }; 261 261 262 262 /** Frees a two-dimensional array. … … 266 266 template <typename X> void Free2DArray(X **ptr, int dim) 267 267 { 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 } 275 275 }; 276 276 … … 281 281 class Verbose 282 282 { 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; 289 289 }; 290 290 … … 295 295 class Binary 296 296 { 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; 303 303 }; 304 304
Note:
See TracChangeset
for help on using the changeset viewer.
