prtypes.h
上传用户:goldcmy89
上传日期:2017-12-03
资源大小:2246k
文件大小:19k
源码类别:

PlugIns编程

开发平台:

Visual C++

  1. /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
  2. /* ***** BEGIN LICENSE BLOCK *****
  3.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  4.  *
  5.  * The contents of this file are subject to the Mozilla Public License Version
  6.  * 1.1 (the "License"); you may not use this file except in compliance with
  7.  * the License. You may obtain a copy of the License at
  8.  * http://www.mozilla.org/MPL/
  9.  *
  10.  * Software distributed under the License is distributed on an "AS IS" basis,
  11.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  12.  * for the specific language governing rights and limitations under the
  13.  * License.
  14.  *
  15.  * The Original Code is the Netscape Portable Runtime (NSPR).
  16.  *
  17.  * The Initial Developer of the Original Code is
  18.  * Netscape Communications Corporation.
  19.  * Portions created by the Initial Developer are Copyright (C) 1998-2000
  20.  * the Initial Developer. All Rights Reserved.
  21.  *
  22.  * Contributor(s):
  23.  *
  24.  * Alternatively, the contents of this file may be used under the terms of
  25.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  26.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  27.  * in which case the provisions of the GPL or the LGPL are applicable instead
  28.  * of those above. If you wish to allow use of your version of this file only
  29.  * under the terms of either the GPL or the LGPL, and not to allow others to
  30.  * use your version of this file under the terms of the MPL, indicate your
  31.  * decision by deleting the provisions above and replace them with the notice
  32.  * and other provisions required by the GPL or the LGPL. If you do not delete
  33.  * the provisions above, a recipient may use your version of this file under
  34.  * the terms of any one of the MPL, the GPL or the LGPL.
  35.  *
  36.  * ***** END LICENSE BLOCK ***** */
  37. /*
  38. ** File:                prtypes.h
  39. ** Description: Definitions of NSPR's basic types
  40. **
  41. ** Prototypes and macros used to make up for deficiencies that we have found
  42. ** in ANSI environments.
  43. **
  44. ** Since we do not wrap <stdlib.h> and all the other standard headers, authors
  45. ** of portable code will not know in general that they need these definitions.
  46. ** Instead of requiring these authors to find the dependent uses in their code
  47. ** and take the following steps only in those C files, we take steps once here
  48. ** for all C files.
  49. **/
  50. #ifndef prtypes_h___
  51. #define prtypes_h___
  52. #ifdef MDCPUCFG
  53. #include MDCPUCFG
  54. #else
  55. #include "prcpucfg.h"
  56. #endif
  57. #include <stddef.h>
  58. /***********************************************************************
  59. ** MACROS:      PR_EXTERN
  60. **              PR_IMPLEMENT
  61. ** DESCRIPTION:
  62. **      These are only for externally visible routines and globals.  For
  63. **      internal routines, just use "extern" for type checking and that
  64. **      will not export internal cross-file or forward-declared symbols.
  65. **      Define a macro for declaring procedures return types. We use this to
  66. **      deal with windoze specific type hackery for DLL definitions. Use
  67. **      PR_EXTERN when the prototype for the method is declared. Use
  68. **      PR_IMPLEMENT for the implementation of the method.
  69. **
  70. ** Example:
  71. **   in dowhim.h
  72. **     PR_EXTERN( void ) DoWhatIMean( void );
  73. **   in dowhim.c
  74. **     PR_IMPLEMENT( void ) DoWhatIMean( void ) { return; }
  75. **
  76. **
  77. ***********************************************************************/
  78. #if defined(WIN32)
  79. #define PR_EXPORT(__type) extern __declspec(dllexport) __type
  80. #define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type
  81. #define PR_IMPORT(__type) __declspec(dllimport) __type
  82. #define PR_IMPORT_DATA(__type) __declspec(dllimport) __type
  83. #define PR_EXTERN(__type) extern __declspec(dllexport) __type
  84. #define PR_IMPLEMENT(__type) __declspec(dllexport) __type
  85. #define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type
  86. #define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type
  87. #define PR_CALLBACK
  88. #define PR_CALLBACK_DECL
  89. #define PR_STATIC_CALLBACK(__x) static __x
  90. #elif defined(XP_BEOS)
  91. #define PR_EXPORT(__type) extern __declspec(dllexport) __type
  92. #define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type
  93. #define PR_IMPORT(__type) extern __declspec(dllexport) __type
  94. #define PR_IMPORT_DATA(__type) extern __declspec(dllexport) __type
  95. #define PR_EXTERN(__type) extern __declspec(dllexport) __type
  96. #define PR_IMPLEMENT(__type) __declspec(dllexport) __type
  97. #define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type
  98. #define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type
  99. #define PR_CALLBACK
  100. #define PR_CALLBACK_DECL
  101. #define PR_STATIC_CALLBACK(__x) static __x
  102. #elif defined(WIN16)
  103. #define PR_CALLBACK_DECL        __cdecl
  104. #if defined(_WINDLL)
  105. #define PR_EXPORT(__type) extern __type _cdecl _export _loadds
  106. #define PR_IMPORT(__type) extern __type _cdecl _export _loadds
  107. #define PR_EXPORT_DATA(__type) extern __type _export
  108. #define PR_IMPORT_DATA(__type) extern __type _export
  109. #define PR_EXTERN(__type) extern __type _cdecl _export _loadds
  110. #define PR_IMPLEMENT(__type) __type _cdecl _export _loadds
  111. #define PR_EXTERN_DATA(__type) extern __type _export
  112. #define PR_IMPLEMENT_DATA(__type) __type _export
  113. #define PR_CALLBACK             __cdecl __loadds
  114. #define PR_STATIC_CALLBACK(__x) static __x PR_CALLBACK
  115. #else /* this must be .EXE */
  116. #define PR_EXPORT(__type) extern __type _cdecl _export
  117. #define PR_IMPORT(__type) extern __type _cdecl _export
  118. #define PR_EXPORT_DATA(__type) extern __type _export
  119. #define PR_IMPORT_DATA(__type) extern __type _export
  120. #define PR_EXTERN(__type) extern __type _cdecl _export
  121. #define PR_IMPLEMENT(__type) __type _cdecl _export
  122. #define PR_EXTERN_DATA(__type) extern __type _export
  123. #define PR_IMPLEMENT_DATA(__type) __type _export
  124. #define PR_CALLBACK             __cdecl __loadds
  125. #define PR_STATIC_CALLBACK(__x) __x PR_CALLBACK
  126. #endif /* _WINDLL */
  127. #elif defined(XP_MAC)
  128. #define PR_EXPORT(__type) extern __declspec(export) __type
  129. #define PR_EXPORT_DATA(__type) extern __declspec(export) __type
  130. #define PR_IMPORT(__type) extern __declspec(export) __type
  131. #define PR_IMPORT_DATA(__type) extern __declspec(export) __type
  132. #define PR_EXTERN(__type) extern __declspec(export) __type
  133. #define PR_IMPLEMENT(__type) __declspec(export) __type
  134. #define PR_EXTERN_DATA(__type) extern __declspec(export) __type
  135. #define PR_IMPLEMENT_DATA(__type) __declspec(export) __type
  136. #define PR_CALLBACK
  137. #define PR_CALLBACK_DECL
  138. #define PR_STATIC_CALLBACK(__x) static __x
  139. #elif defined(XP_OS2_VACPP) 
  140. #define PR_EXPORT(__type) extern __type
  141. #define PR_EXPORT_DATA(__type) extern __type
  142. #define PR_IMPORT(__type) extern __type
  143. #define PR_IMPORT_DATA(__type) extern __type
  144. #define PR_EXTERN(__type) extern __type
  145. #define PR_IMPLEMENT(__type) __type
  146. #define PR_EXTERN_DATA(__type) extern __type
  147. #define PR_IMPLEMENT_DATA(__type) __type
  148. #define PR_CALLBACK _Optlink
  149. #define PR_CALLBACK_DECL
  150. #define PR_STATIC_CALLBACK(__x) static __x PR_CALLBACK
  151. #else /* Unix */
  152. #ifdef HAVE_VISIBILITY_PRAGMA
  153. #define PR_VISIBILITY_DEFAULT __attribute__((visibility("default")))
  154. #else
  155. #define PR_VISIBILITY_DEFAULT
  156. #endif
  157. #define PR_EXPORT(__type) extern PR_VISIBILITY_DEFAULT __type
  158. #define PR_EXPORT_DATA(__type) extern PR_VISIBILITY_DEFAULT __type
  159. #define PR_IMPORT(__type) extern PR_VISIBILITY_DEFAULT __type
  160. #define PR_IMPORT_DATA(__type) extern PR_VISIBILITY_DEFAULT __type
  161. #define PR_EXTERN(__type) extern PR_VISIBILITY_DEFAULT __type
  162. #define PR_IMPLEMENT(__type) PR_VISIBILITY_DEFAULT __type
  163. #define PR_EXTERN_DATA(__type) extern PR_VISIBILITY_DEFAULT __type
  164. #define PR_IMPLEMENT_DATA(__type) PR_VISIBILITY_DEFAULT __type
  165. #define PR_CALLBACK
  166. #define PR_CALLBACK_DECL
  167. #define PR_STATIC_CALLBACK(__x) static __x
  168. #endif
  169. #if defined(_NSPR_BUILD_)
  170. #define NSPR_API(__type) PR_EXPORT(__type)
  171. #define NSPR_DATA_API(__type) PR_EXPORT_DATA(__type)
  172. #else
  173. #define NSPR_API(__type) PR_IMPORT(__type)
  174. #define NSPR_DATA_API(__type) PR_IMPORT_DATA(__type)
  175. #endif
  176. /***********************************************************************
  177. ** MACROS:      PR_BEGIN_MACRO
  178. **              PR_END_MACRO
  179. ** DESCRIPTION:
  180. **      Macro body brackets so that macros with compound statement definitions
  181. **      behave syntactically more like functions when called.
  182. ***********************************************************************/
  183. #define PR_BEGIN_MACRO  do {
  184. #define PR_END_MACRO    } while (0)
  185. /***********************************************************************
  186. ** MACROS:      PR_BEGIN_EXTERN_C
  187. **              PR_END_EXTERN_C
  188. ** DESCRIPTION:
  189. **      Macro shorthands for conditional C++ extern block delimiters.
  190. ***********************************************************************/
  191. #ifdef __cplusplus
  192. #define PR_BEGIN_EXTERN_C       extern "C" {
  193. #define PR_END_EXTERN_C         }
  194. #else
  195. #define PR_BEGIN_EXTERN_C
  196. #define PR_END_EXTERN_C
  197. #endif
  198. /***********************************************************************
  199. ** MACROS:      PR_BIT
  200. **              PR_BITMASK
  201. ** DESCRIPTION:
  202. ** Bit masking macros.  XXX n must be <= 31 to be portable
  203. ***********************************************************************/
  204. #define PR_BIT(n)       ((PRUint32)1 << (n))
  205. #define PR_BITMASK(n)   (PR_BIT(n) - 1)
  206. /***********************************************************************
  207. ** MACROS:      PR_ROUNDUP
  208. **              PR_MIN
  209. **              PR_MAX
  210. **              PR_ABS
  211. ** DESCRIPTION:
  212. **      Commonly used macros for operations on compatible types.
  213. ***********************************************************************/
  214. #define PR_ROUNDUP(x,y) ((((x)+((y)-1))/(y))*(y))
  215. #define PR_MIN(x,y)     ((x)<(y)?(x):(y))
  216. #define PR_MAX(x,y)     ((x)>(y)?(x):(y))
  217. #define PR_ABS(x)       ((x)<0?-(x):(x))
  218. PR_BEGIN_EXTERN_C
  219. /************************************************************************
  220. ** TYPES:       PRUint8
  221. **              PRInt8
  222. ** DESCRIPTION:
  223. **  The int8 types are known to be 8 bits each. There is no type that
  224. **      is equivalent to a plain "char". 
  225. ************************************************************************/
  226. #if PR_BYTES_PER_BYTE == 1
  227. typedef unsigned char PRUint8;
  228. /*
  229. ** Some cfront-based C++ compilers do not like 'signed char' and
  230. ** issue the warning message:
  231. **     warning: "signed" not implemented (ignored)
  232. ** For these compilers, we have to define PRInt8 as plain 'char'.
  233. ** Make sure that plain 'char' is indeed signed under these compilers.
  234. */
  235. #if (defined(HPUX) && defined(__cplusplus) 
  236.         && !defined(__GNUC__) && __cplusplus < 199707L) 
  237.     || (defined(SCO) && defined(__cplusplus) 
  238.         && !defined(__GNUC__) && __cplusplus == 1L)
  239. typedef char PRInt8;
  240. #else
  241. typedef signed char PRInt8;
  242. #endif
  243. #else
  244. #error No suitable type for PRInt8/PRUint8
  245. #endif
  246. /************************************************************************
  247.  * MACROS:      PR_INT8_MAX
  248.  *              PR_INT8_MIN
  249.  *              PR_UINT8_MAX
  250.  * DESCRIPTION:
  251.  *  The maximum and minimum values of a PRInt8 or PRUint8.
  252. ************************************************************************/
  253. #define PR_INT8_MAX 127
  254. #define PR_INT8_MIN (-128)
  255. #define PR_UINT8_MAX 255U
  256. /************************************************************************
  257. ** TYPES:       PRUint16
  258. **              PRInt16
  259. ** DESCRIPTION:
  260. **  The int16 types are known to be 16 bits each. 
  261. ************************************************************************/
  262. #if PR_BYTES_PER_SHORT == 2
  263. typedef unsigned short PRUint16;
  264. typedef short PRInt16;
  265. #else
  266. #error No suitable type for PRInt16/PRUint16
  267. #endif
  268. /************************************************************************
  269.  * MACROS:      PR_INT16_MAX
  270.  *              PR_INT16_MIN
  271.  *              PR_UINT16_MAX
  272.  * DESCRIPTION:
  273.  *  The maximum and minimum values of a PRInt16 or PRUint16.
  274. ************************************************************************/
  275. #define PR_INT16_MAX 32767
  276. #define PR_INT16_MIN (-32768)
  277. #define PR_UINT16_MAX 65535U
  278. /************************************************************************
  279. ** TYPES:       PRUint32
  280. **              PRInt32
  281. ** DESCRIPTION:
  282. **  The int32 types are known to be 32 bits each. 
  283. ************************************************************************/
  284. #if PR_BYTES_PER_INT == 4
  285. typedef unsigned int PRUint32;
  286. typedef int PRInt32;
  287. #define PR_INT32(x)  x
  288. #define PR_UINT32(x) x ## U
  289. #elif PR_BYTES_PER_LONG == 4
  290. typedef unsigned long PRUint32;
  291. typedef long PRInt32;
  292. #define PR_INT32(x)  x ## L
  293. #define PR_UINT32(x) x ## UL
  294. #else
  295. #error No suitable type for PRInt32/PRUint32
  296. #endif
  297. /************************************************************************
  298.  * MACROS:      PR_INT32_MAX
  299.  *              PR_INT32_MIN
  300.  *              PR_UINT32_MAX
  301.  * DESCRIPTION:
  302.  *  The maximum and minimum values of a PRInt32 or PRUint32.
  303. ************************************************************************/
  304. #define PR_INT32_MAX PR_INT32(2147483647)
  305. #define PR_INT32_MIN (-PR_INT32_MAX - 1)
  306. #define PR_UINT32_MAX PR_UINT32(4294967295)
  307. /************************************************************************
  308. ** TYPES:       PRUint64
  309. **              PRInt64
  310. ** DESCRIPTION:
  311. **  The int64 types are known to be 64 bits each. Care must be used when
  312. **      declaring variables of type PRUint64 or PRInt64. Different hardware
  313. **      architectures and even different compilers have varying support for
  314. **      64 bit values. The only guaranteed portability requires the use of
  315. **      the LL_ macros (see prlong.h).
  316. ************************************************************************/
  317. #ifdef HAVE_LONG_LONG
  318. #if PR_BYTES_PER_LONG == 8
  319. typedef long PRInt64;
  320. typedef unsigned long PRUint64;
  321. #elif defined(WIN16)
  322. typedef __int64 PRInt64;
  323. typedef unsigned __int64 PRUint64;
  324. #elif defined(WIN32) && !defined(__GNUC__)
  325. typedef __int64  PRInt64;
  326. typedef unsigned __int64 PRUint64;
  327. #else
  328. typedef long long PRInt64;
  329. typedef unsigned long long PRUint64;
  330. #endif /* PR_BYTES_PER_LONG == 8 */
  331. #else  /* !HAVE_LONG_LONG */
  332. typedef struct {
  333. #ifdef IS_LITTLE_ENDIAN
  334.     PRUint32 lo, hi;
  335. #else
  336.     PRUint32 hi, lo;
  337. #endif
  338. } PRInt64;
  339. typedef PRInt64 PRUint64;
  340. #endif /* !HAVE_LONG_LONG */
  341. /************************************************************************
  342. ** TYPES:       PRUintn
  343. **              PRIntn
  344. ** DESCRIPTION:
  345. **  The PRIntn types are most appropriate for automatic variables. They are
  346. **      guaranteed to be at least 16 bits, though various architectures may
  347. **      define them to be wider (e.g., 32 or even 64 bits). These types are
  348. **      never valid for fields of a structure. 
  349. ************************************************************************/
  350. #if PR_BYTES_PER_INT >= 2
  351. typedef int PRIntn;
  352. typedef unsigned int PRUintn;
  353. #else
  354. #error 'sizeof(int)' not sufficient for platform use
  355. #endif
  356. /************************************************************************
  357. ** TYPES:       PRFloat64
  358. ** DESCRIPTION:
  359. **  NSPR's floating point type is always 64 bits. 
  360. ************************************************************************/
  361. typedef double          PRFloat64;
  362. /************************************************************************
  363. ** TYPES:       PRSize
  364. ** DESCRIPTION:
  365. **  A type for representing the size of objects. 
  366. ************************************************************************/
  367. typedef size_t PRSize;
  368. /************************************************************************
  369. ** TYPES:       PROffset32, PROffset64
  370. ** DESCRIPTION:
  371. **  A type for representing byte offsets from some location. 
  372. ************************************************************************/
  373. typedef PRInt32 PROffset32;
  374. typedef PRInt64 PROffset64;
  375. /************************************************************************
  376. ** TYPES:       PRPtrDiff
  377. ** DESCRIPTION:
  378. **  A type for pointer difference. Variables of this type are suitable
  379. **      for storing a pointer or pointer subtraction. 
  380. ************************************************************************/
  381. typedef ptrdiff_t PRPtrdiff;
  382. /************************************************************************
  383. ** TYPES:       PRUptrdiff
  384. ** DESCRIPTION:
  385. **  A type for pointer difference. Variables of this type are suitable
  386. **      for storing a pointer or pointer sutraction. 
  387. ************************************************************************/
  388. typedef unsigned long PRUptrdiff;
  389. /************************************************************************
  390. ** TYPES:       PRBool
  391. ** DESCRIPTION:
  392. **  Use PRBool for variables and parameter types. Use PR_FALSE and PR_TRUE
  393. **      for clarity of target type in assignments and actual arguments. Use
  394. **      'if (bool)', 'while (!bool)', '(bool) ? x : y' etc., to test booleans
  395. **      just as you would C int-valued conditions. 
  396. ************************************************************************/
  397. typedef PRIntn PRBool;
  398. #define PR_TRUE 1
  399. #define PR_FALSE 0
  400. /************************************************************************
  401. ** TYPES:       PRPackedBool
  402. ** DESCRIPTION:
  403. **  Use PRPackedBool within structs where bitfields are not desirable
  404. **      but minimum and consistant overhead matters.
  405. ************************************************************************/
  406. typedef PRUint8 PRPackedBool;
  407. /*
  408. ** Status code used by some routines that have a single point of failure or 
  409. ** special status return.
  410. */
  411. typedef enum { PR_FAILURE = -1, PR_SUCCESS = 0 } PRStatus;
  412. #ifdef MOZ_UNICODE
  413. /*
  414.  * EXPERIMENTAL: This type may be removed in a future release.
  415.  */
  416. #ifndef __PRUNICHAR__
  417. #define __PRUNICHAR__
  418. #if defined(WIN32) || defined(XP_MAC)
  419. typedef wchar_t PRUnichar;
  420. #else
  421. typedef PRUint16 PRUnichar;
  422. #endif
  423. #endif
  424. #endif /* MOZ_UNICODE */
  425. /*
  426. ** WARNING: The undocumented data types PRWord and PRUword are
  427. ** only used in the garbage collection and arena code.  Do not
  428. ** use PRWord and PRUword in new code.
  429. **
  430. ** A PRWord is an integer that is the same size as a void*.
  431. ** It implements the notion of a "word" in the Java Virtual
  432. ** Machine.  (See Sec. 3.4 "Words", The Java Virtual Machine
  433. ** Specification, Addison-Wesley, September 1996.
  434. ** http://java.sun.com/docs/books/vmspec/index.html.)
  435. */
  436. typedef long PRWord;
  437. typedef unsigned long PRUword;
  438. #if defined(NO_NSPR_10_SUPPORT)
  439. #else
  440. /********* ???????????????? FIX ME       ??????????????????????????? *****/
  441. /********************** Some old definitions until pr=>ds transition is done ***/
  442. /********************** Also, we are still using NSPR 1.0. GC ******************/
  443. /*
  444. ** Fundamental NSPR macros, used nearly everywhere.
  445. */
  446. #define PR_PUBLIC_API PR_IMPLEMENT
  447. /*
  448. ** Macro body brackets so that macros with compound statement definitions
  449. ** behave syntactically more like functions when called.
  450. */
  451. #define NSPR_BEGIN_MACRO        do {
  452. #define NSPR_END_MACRO          } while (0)
  453. /*
  454. ** Macro shorthands for conditional C++ extern block delimiters.
  455. */
  456. #ifdef NSPR_BEGIN_EXTERN_C
  457. #undef NSPR_BEGIN_EXTERN_C
  458. #endif
  459. #ifdef NSPR_END_EXTERN_C
  460. #undef NSPR_END_EXTERN_C
  461. #endif
  462. #ifdef __cplusplus
  463. #define NSPR_BEGIN_EXTERN_C     extern "C" {
  464. #define NSPR_END_EXTERN_C       }
  465. #else
  466. #define NSPR_BEGIN_EXTERN_C
  467. #define NSPR_END_EXTERN_C
  468. #endif
  469. #ifdef XP_MAC
  470. #include "protypes.h"
  471. #else
  472. #include "obsolete/protypes.h"
  473. #endif
  474. /********* ????????????? End Fix me ?????????????????????????????? *****/
  475. #endif /* NO_NSPR_10_SUPPORT */
  476. PR_END_EXTERN_C
  477. #endif /* prtypes_h___ */