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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: ncbi_std.h,v $
  4.  * PRODUCTION Revision 1000.4  2004/06/01 18:04:20  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.28
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /* $Id: ncbi_std.h,v 1000.4 2004/06/01 18:04:20 gouriano Exp $
  10.  * ===========================================================================
  11.  *
  12.  *                            PUBLIC DOMAIN NOTICE
  13.  *               National Center for Biotechnology Information
  14.  *
  15.  *  This software/database is a "United States Government Work" under the
  16.  *  terms of the United States Copyright Act.  It was written as part of
  17.  *  the author's offical duties as a United States Government employee and
  18.  *  thus cannot be copyrighted.  This software/database is freely available
  19.  *  to the public for use. The National Library of Medicine and the U.S.
  20.  *  Government have not placed any restriction on its use or reproduction.
  21.  *
  22.  *  Although all reasonable efforts have been taken to ensure the accuracy
  23.  *  and reliability of the software and data, the NLM and the U.S.
  24.  *  Government do not and cannot warrant the performance or results that
  25.  *  may be obtained by using this software or data. The NLM and the U.S.
  26.  *  Government disclaim all warranties, express or implied, including
  27.  *  warranties of performance, merchantability or fitness for any particular
  28.  *  purpose.
  29.  *
  30.  *  Please cite the author in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Author: Ilya Dondoshansky
  35.  *
  36.  */
  37. /** @file ncbi_std.h
  38.  * Type and macro definitions from C toolkit that are not defined in C++ 
  39.  * toolkit.
  40.  */
  41. #ifndef __NCBI_STD__
  42. #define __NCBI_STD__
  43. #include <stdio.h>
  44. #include <stdlib.h>
  45. #include <string.h>
  46. #include <math.h>
  47. #include <ctype.h>
  48. #include <assert.h>
  49. /* which toolkit are we using? */
  50. #include "blast_toolkit.h"
  51. #include <algo/blast/core/ncbi_math.h>
  52. #ifdef __cplusplus
  53. extern "C" {
  54. #endif
  55. /* For some reason, ICC claims a suitable __STDC_VERSION__ but then
  56.    barfs on restrict. */
  57. #ifdef __ICC
  58. #define NCBI_RESTRICT __restrict
  59. #elif __STDC_VERSION__ >= 199901
  60. #define NCBI_RESTRICT restrict
  61. #else
  62. #define NCBI_RESTRICT
  63. #endif
  64. /* inlining support -- compiler dependent */
  65. #if defined(__cplusplus)  ||  __STDC_VERSION__ >= 199901
  66. /* C++ and C99 both guarantee "inline" */
  67. #define NCBI_INLINE inline
  68. #elif defined(__GNUC__)
  69. /* So does GCC, normally, but it may be running with strict options
  70.    that require the extra underscores */
  71. #define NCBI_INLINE __inline__
  72. #elif defined(_MSC_VER)  ||  defined(__sgi) || defined(HPUX)
  73. /* MSVC and (older) MIPSpro always require leading underscores */
  74. #define NCBI_INLINE __inline
  75. #else
  76. /* "inline" seems to work on our remaining in-house compilers
  77.    (WorkShop, Compaq, ICC, MPW) */
  78. #define NCBI_INLINE inline
  79. #endif
  80. #ifdef _MSC_VER
  81. #define strcasecmp _stricmp
  82. #define strdup _strdup
  83. #define snprintf _snprintf
  84. #endif
  85. #ifndef _NCBISTD_ /* if we're not in the C toolkit... */
  86. typedef Uint1 Boolean;
  87. #ifndef TRUE
  88. #define TRUE 1
  89. #endif
  90. #ifndef FALSE
  91. #define FALSE 0
  92. #endif
  93. #endif
  94. #ifndef ASSERT
  95. #define ASSERT assert
  96. #endif
  97. #ifndef MIN
  98. #define MIN(a,b) ((a)>(b)?(b):(a))
  99. #endif
  100. #ifndef MAX
  101. #define MAX(a,b) ((a)>=(b)?(a):(b))
  102. #endif
  103. #ifndef ABS
  104. #define ABS(a) ((a)>=0?(a):-(a))
  105. #endif
  106. #ifndef SIGN
  107. #define SIGN(a) ((a)>0?1:((a)<0?-1:0))
  108. #endif
  109. /* low-level ANSI-style functions */
  110. #ifndef _NCBISTD_ /* if we're not in the C toolkit ... */
  111. #define UINT4_MAX     4294967295U
  112. #define INT4_MAX    2147483647
  113. #define INT4_MIN    (-2147483647-1)
  114. #define NCBIMATH_LN2      0.69314718055994530941723212145818
  115. #define LN2         (0.693147180559945)
  116. #define INT2_MAX    32767
  117. #define INT2_MIN    (-32768)
  118. #ifndef DIM
  119. #define DIM(A) (sizeof(A)/sizeof((A)[0]))
  120. #endif
  121. #define NULLB ''
  122. #ifndef PATH_MAX
  123. #define PATH_MAX 1024
  124. #endif
  125. #define DIRDELIMSTR        "/"
  126. #else
  127. #endif /* _NCBISTD_ */
  128. extern void* BlastMemDup (const void *orig, size_t size);
  129. /******************************************************************************/
  130. /** A generic linked list node structure */
  131. typedef struct ListNode {
  132. Uint1 choice;   /* to pick a choice */
  133. void *ptr;              /* attached data */
  134. struct ListNode *next;  /* next in linked list */
  135. } ListNode;
  136. ListNode* ListNodeNew (ListNode* vnp);
  137. ListNode* ListNodeAdd (ListNode** head);
  138. ListNode* ListNodeAddPointer (ListNode** head, Uint1 choice, void *value);
  139. ListNode* ListNodeFree (ListNode* vnp);
  140. ListNode* ListNodeFreeData (ListNode* vnp);
  141. ListNode* ListNodeSort (ListNode* list_to_sort, 
  142.                int (*compar) (const void *, const void *));
  143. ListNode* ListNodeCopyStr (ListNode** head, Uint1 choice, char* str);
  144. Int4 ListNodeLen (ListNode* vnp);
  145. #ifdef __cplusplus
  146. }
  147. #endif
  148. #endif /* !__NCBI_STD__ */