/* * * gengraph - generation of random simple connected graphs with prescribed * degree sequence * * Copyright (C) 2006 Fabien Viger * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef DEFINITIONS_H #define DEFINITIONS_H #include #include #include namespace gengraph { // Max line size in files #define FBUFF_SIZE 1000000 // disable lousy VC++ warnings #ifdef _ATL_VER_ #pragma warning(disable : 4127) #endif //_ATL_VER_ // Verbose #define VERBOSE_NONE 0 #define VERBOSE_SOME 1 #define VERBOSE_LOTS 2 int VERBOSE(); void SET_VERBOSE(int v); // Random number generator void my_srandom(int); int my_random(); int my_binomial(double pp, int n); double my_random01(); // (0,1] #define MY_RAND_MAX 0x7FFFFFFF // IPv4 address direct translation into 32-bit uint + special IP defs typedef unsigned int ip_addr; #define IP_NONE 0x7FFFFFFF #define IP_STAR 0x00000000 #define IP_MYSELF 0x7F000001 // Compatibility #ifdef _WIN32 #define strcasecmp _stricmp #endif //inline double round(double x) throw () { return (floor(0.5+x)); } // No assert #ifndef _DEBUG #ifndef NDEBUG #define NDEBUG #endif //NDEBUG #endif //_DEBUG // Min & Max #ifndef min #define defmin(type) inline type min(type a, type b) { return ab ? a : b; } defmax(int) defmax(double) defmax(unsigned long) #endif //max // Traceroute Sampling #define MODE_USP 0 #define MODE_ASP 1 #define MODE_RSP 2 // Debug definitions //#define PERFORMANCE_MONITOR //#define OPT_ISOLATED // Max Int #ifndef MAX_INT #define MAX_INT 0x7FFFFFFF #endif //MAX_INT //Edge type typedef struct { int from; int to; } edge; // Tag Int #define TAG_INT 0x40000000 // Oldies .... #define S_VECTOR_RAW //********************* // Routine definitions //********************* /* log(1+x) inline double logp(double x) { if(fabs(x)<1e-6) return x+0.5*x*x+0.333333333333333*x*x*x; else return log(1.0+x); } */ //Fast search or replace inline int* fast_rpl(int *m, const int a, const int b) { while (*m != a) { m++; } *m = b; return m; } inline int* fast_search(int *m, const int size, const int a) { int *p = m + size; while (m != p--) if (*p == a) { return p; } return NULL; } // Lovely percentage print // inline void print_percent(double yo, FILE *f = stderr) { // int arf = int(100.0*yo); // if(double(arf)>100.0*yo) arf--; // if(arf<100) fprintf(f," "); // if(arf<10) fprintf(f," "); // fprintf(f,"%d.%d%%",arf,int(1000.0*yo-double(10*arf))); // } // Skips non-numerical chars, then numerical chars, then non-numerical chars. inline char skip_int(char* &c) { while (*c < '0' || *c > '9') { c++; } while (*c >= '0' && *c <= '9') { c++; } while (*c != 0 && (*c < '0' || *c > '9')) { c++; } return *c; } // distance+1 modulo 255 for breadth-first search inline unsigned char next_dist(const unsigned char c) { return c == 255 ? 1 : c + 1; } inline unsigned char prev_dist(const unsigned char c) { return c == 1 ? 255 : c - 1; } // 1/(RANDMAX+1) #define inv_RANDMAX (1.0/(1.0+double(MY_RAND_MAX))) // random number in ]0,1[, _very_ accurate around 0 inline double random_float() { int r = my_random(); double mul = inv_RANDMAX; while (r <= 0x7FFFFF) { r <<= 8; r += (my_random() & 0xFF); mul *= (1.0 / 256.0); } return double(r) * mul; } // Return true with probability p. Very accurate when p is small. #define test_proba(p) (random_float()<(p)) // Random bit generator, sparwise. static int _random_bits_stored = 0; static int _random_bits = 0; inline int random_bit() { int a = _random_bits; _random_bits = a >> 1; if (_random_bits_stored--) { return a & 0x1; } a = my_random(); _random_bits = a >> 1; _random_bits_stored = 30; return a & 0x1; } // Hash Profiling (see hash.h) void _hash_prof(); } // namespace gengraph #endif //DEFINITIONS_H