10 * Created by Sarah Westcott on 2/19/09.
11 * Copyright 2009 Schloss Lab UMASS Amherst. All rights reserved.
15 /* This file contains all the standard incudes we use in the project as well as some common utilities. */
53 /***********************************************************************/
55 #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)
58 #include <sys/resource.h>
62 #include <readline/readline.h>
63 #include <readline/history.h>
67 #include <conio.h> //allows unbuffered screen capture from stdin
68 #include <direct.h> //get cwd
76 #define exp(x) (exp((double) x))
77 #define sqrt(x) (sqrt((double) x))
78 #define log10(x) (log10((double) x))
79 #define log2(x) (log10(x)/log10(2))
80 #define isnan(x) ((x) != (x))
81 #define isinf(x) (fabs(x) == std::numeric_limits<double>::infinity())
83 typedef unsigned long ull;
93 IntNode(int lv, int rv, IntNode* l, IntNode* r) : lvalue(lv), rvalue(rv), left(l), right(r) {};
103 /************************************************************/
107 int smallChild; //used to make linkTable work with list and rabund. represents bin number of this cluster node
108 clusterNode(int num, int par, int kid) : numSeq(num), parent(par), smallChild(kid) {};
110 /************************************************************/
116 seqDist(int s1, int s2, float d) : seq1(s1), seq2(s2), dist(d) {}
119 //********************************************************************************************************************
120 //sorts lowest to highest
121 inline bool compareSequenceDistance(seqDist left, seqDist right){
122 return (left.dist < right.dist);
124 /***********************************************************************/
126 // snagged from http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.2
127 // works for now, but there should be a way to do it without killing the whole program
129 class BadConversion : public runtime_error {
131 BadConversion(const string& s) : runtime_error(s){ }
134 //**********************************************************************************************************************
136 void convert(const string& s, T& x, bool failIfLeftoverChars = true){
140 if (!(i >> x) || (failIfLeftoverChars && i.get(c)))
141 throw BadConversion(s);
145 //**********************************************************************************************************************
148 bool convertTestFloat(const string& s, T& x, bool failIfLeftoverChars = true){
152 if (!(i >> x) || (failIfLeftoverChars && i.get(c)))
160 //**********************************************************************************************************************
163 bool convertTest(const string& s, T& x, bool failIfLeftoverChars = true){
167 if (!(i >> x) || (failIfLeftoverChars && i.get(c)))
174 //**********************************************************************************************************************
176 string toString(const T&x){
184 //**********************************************************************************************************************
187 string toHex(const T&x){
196 //**********************************************************************************************************************
199 string toString(const T&x, int i){
204 output << fixed << x;
209 //**********************************************************************************************************************