00001 #include <string.h>
00002
00003 #include <citrus/config.h>
00004 #if defined(__GNUC__) && defined(__LINUX__)
00005 #include <nan.h>
00006 double dtNaN = _QNAN ;
00007 double dtPInf = 1.0/0.0 ;
00008 double dtNInf = -1.0/0.0 ;
00009 #else
00010 double dtNaN = 0.0/0.0 ;
00011 double dtPInf = 1.0/0.0 ;
00012 double dtNInf = -1.0/0.0 ;
00013 #endif
00014
00015 char* strndup( const char* src, int maxlen)
00016 {
00017 int len = strlen( src ) ;
00018 if ( len > maxlen ) len = maxlen ;
00019 char* dest = new char[len+1] ;
00020 strncpy( dest, src, len ) ;
00021 dest[len]='\0';
00022 return dest ;
00023 }
00024
00025 char* dt_strdup( const char* src )
00026 {
00027 int len = strlen( src ) ;
00028 char* dest = new char[len+1] ;
00029 strcpy( dest, src ) ;
00030 return dest ;
00031 }
00032
00033 int factorial( int n, int lower )
00034 {
00035 if ( n < 2 ) return 1 ;
00036 if ( n == 2 ) return 2 ;
00037
00038 int res = 2 ;
00039
00040 for (int i = 3 > lower ? 3 : lower ; i<=n; i++)
00041 res *= i ;
00042
00043 return res ;
00044 }