bmdef.h
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:2k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: bmdef.h,v $
  4.  * PRODUCTION Revision 1000.0  2004/04/21 16:00:37  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [CATCHUP_003] Dev-tree R1.1
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. // BM library internal header
  10. //
  11. // Set all required preprocessor defines
  12. #ifndef BM_ASSERT
  13. # ifndef BM_NOASSERT
  14. #  include <assert.h>
  15. #  define BM_ASSERT assert
  16. # else
  17. #  define BM_ASSERT(x)
  18. # endif
  19. #endif
  20. #define FULL_BLOCK_ADDR all_set<true>::_block._p
  21. #define IS_VALID_ADDR(addr) (addr && (addr != FULL_BLOCK_ADDR))
  22. #define IS_FULL_BLOCK(addr) (addr == FULL_BLOCK_ADDR)
  23. #define IS_EMPTY_BLOCK(addr) (addr == 0)
  24. // Macro definitions to manipulate bits in pointers
  25. // This trick is based on the fact that pointers allocated by malloc are
  26. // aligned and bit 0 is never set. It means we are safe to use it.
  27. // BM library keeps GAP flag in pointer.
  28. // Note: this hack is not universally portable so if it does not work
  29. // in some particular case disable it by defining BM_DISBALE_BIT_IN_PTR
  30. #ifdef BM_DISBALE_BIT_IN_PTR
  31. # define BMGAP_PTR(ptr)    ((bm::gap_word_t*)ptr)
  32. # define BMSET_PTRGAP(ptr) (void(0))
  33. # define BM_IS_GAP(obj, ptr, idx) ( obj.is_block_gap(idx) ) 
  34. #else
  35. # if ULONG_MAX == 0xffffffff   // 32-bit
  36. #  define BMPTR_SETBIT0(ptr)   ( ((bm::id_t)ptr) | 1 )
  37. #  define BMPTR_CLEARBIT0(ptr) ( ((bm::id_t)ptr) & ~(bm::id_t)1 )
  38. #  define BMPTR_TESTBIT0(ptr)  ( ((bm::id_t)ptr) & 1 )
  39. # else // 64-bit
  40. #  define BMPTR_SETBIT0(ptr)   ( ((bm::id64_t)ptr) | 1 )
  41. #  define BMPTR_CLEARBIT0(ptr) ( ((bm::id64_t)ptr) & ~(bm::id64_t)1 )
  42. #  define BMPTR_TESTBIT0(ptr)  ( ((bm::id64_t)ptr) & 1 )
  43. # endif
  44. # define BMGAP_PTR(ptr) ((bm::gap_word_t*)BMPTR_CLEARBIT0(ptr))
  45. # define BMSET_PTRGAP(ptr) ptr = (bm::word_t*)BMPTR_SETBIT0(ptr)
  46. # define BM_IS_GAP(obj, ptr, idx) ( BMPTR_TESTBIT0(ptr)!=0 )
  47. #endif
  48. #ifdef BM_HASRESTRICT
  49. # ifndef BMRESTRICT
  50. #  define BMRESTRICT restrict
  51. # endif
  52. #else
  53. # define BMRESTRICT 
  54. #endif
  55. #ifndef BMSSE2OPT
  56. # ifndef BM_SET_MMX_GUARD
  57. #  define BM_SET_MMX_GUARD
  58. # endif
  59. #else
  60. # ifndef BM_SET_MMX_GUARD
  61. #  define BM_SET_MMX_GUARD  sse2_empty_guard  bm_mmx_guard_;
  62. # endif
  63. #endif