builtin.h
上传用户:aoeyumen
上传日期:2007-01-06
资源大小:3329k
文件大小:3k
源码类别:

DVD

开发平台:

Unix_Linux

  1. // This may look like C code, but it is really -*- C++ -*-
  2. /* 
  3. Copyright (C) 1988, 1992 Free Software Foundation
  4.     written by Doug Lea (dl@rocky.oswego.edu)
  5. This file is part of the GNU C++ Library.  This library is free
  6. software; you can redistribute it and/or modify it under the terms of
  7. the GNU Library General Public License as published by the Free
  8. Software Foundation; either version 2 of the License, or (at your
  9. option) any later version.  This library is distributed in the hope
  10. that it will be useful, but WITHOUT ANY WARRANTY; without even the
  11. implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  12. PURPOSE.  See the GNU Library General Public License for more details.
  13. You should have received a copy of the GNU Library General Public
  14. License along with this library; if not, write to the Free Software
  15. Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  16. */
  17. /*
  18.   arithmetic, etc. functions on built in types
  19. */
  20. #ifndef _builtin_h
  21. #ifdef __GNUG__
  22. #pragma interface
  23. #endif
  24. #define _builtin_h 1
  25. #include <stddef.h>
  26. #include <unistd.h>
  27. #include <math.h>
  28. #ifdef __GNUG__
  29. #define _VOLATILE_VOID volatile void
  30. #else
  31. #define _VOLATILE_VOID void
  32. #endif
  33. typedef void (*one_arg_error_handler_t)(const char*);
  34. typedef void (*two_arg_error_handler_t)(const char*, const char*);
  35. long         gcd(long, long);
  36. long         lg(unsigned long); 
  37. double       pow(double, long);
  38. long         pow(long, long);
  39. extern "C" double       start_timer();
  40. extern "C" double       return_elapsed_time(double last_time = 0.0);
  41. char*        dtoa(double x, char cvt = 'g', int width = 0, int prec = 6);
  42. unsigned int hashpjw(const char*);
  43. unsigned int multiplicativehash(int);
  44. unsigned int foldhash(double);
  45. extern _VOLATILE_VOID default_one_arg_error_handler(const char*);
  46. extern _VOLATILE_VOID default_two_arg_error_handler(const char*, const char*);
  47. extern two_arg_error_handler_t lib_error_handler;
  48. extern two_arg_error_handler_t 
  49.        set_lib_error_handler(two_arg_error_handler_t f);
  50. #if !defined(IV)
  51. #if ! _G_MATH_H_INLINES /* hpux and SCO define this in math.h */
  52. inline double abs(double arg) 
  53. {
  54.   return (arg < 0.0)? -arg : arg;
  55. }
  56. #endif
  57. inline float abs(float arg) 
  58. {
  59.   return (arg < 0.0)? -arg : arg;
  60. }
  61. inline short abs(short arg) 
  62. {
  63.   return (arg < 0)? -arg : arg;
  64. }
  65. #ifndef LINUX
  66. inline long abs(long arg) 
  67. {
  68.   return (arg < 0)? -arg : arg;
  69. }
  70. #endif
  71. inline int sign(long arg)
  72. {
  73.   return (arg == 0) ? 0 : ( (arg > 0) ? 1 : -1 );
  74. }
  75. inline int sign(double arg)
  76. {
  77.   return (arg == 0.0) ? 0 : ( (arg > 0.0) ? 1 : -1 );
  78. }
  79. inline long sqr(long arg)
  80. {
  81.   return arg * arg;
  82. }
  83. #if ! _G_MATH_H_INLINES /* hpux and SCO define this in math.h */
  84. inline double sqr(double arg)
  85. {
  86.   return arg * arg;
  87. }
  88. #endif
  89. inline int even(long arg)
  90. {
  91.   return !(arg & 1);
  92. }
  93. inline int odd(long arg)
  94. {
  95.   return (arg & 1);
  96. }
  97. inline long lcm(long x, long y)
  98. {
  99.   return x / gcd(x, y) * y;
  100. }
  101. inline void (setbit)(long& x, long b)
  102. {
  103.   x |= (1 << b);
  104. }
  105. inline void clearbit(long& x, long b)
  106. {
  107.   x &= ~(1 << b);
  108. }
  109. inline int testbit(long x, long b)
  110. {
  111.   return ((x & (1 << b)) != 0);
  112. }
  113. #endif
  114. #endif