15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The contents of this file are subject to the Mozilla Public 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * License Version 1.1 (the "License"); you may not use this file 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * except in compliance with the License. You may obtain a copy of 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the License at http://www.mozilla.org/MPL/ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Software distributed under the License is distributed on an "AS 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * implied. See the License for the specific language governing 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * rights and limitations under the License. 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The Original Code is the Netscape Portable Runtime (NSPR). 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The Initial Developer of the Original Code is Netscape 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Communications Corporation. Portions created by Netscape are 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (C) 1998-2000 Netscape Communications Corporation. All 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Rights Reserved. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Contributor(s): 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Alternatively, the contents of this file may be used under the 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * terms of the GNU General Public License Version 2 or later (the 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * "GPL"), in which case the provisions of the GPL are applicable 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * instead of those above. If you wish to allow use of your 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * version of this file only under the terms of the GPL and not to 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * allow others to use your version of this file under the MPL, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * indicate your decision by deleting the provisions above and 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * replace them with the notice and other provisions required by 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the GPL. If you do not delete the provisions above, a recipient 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * may use your version of this file under either the MPL or the 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * GPL. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** File: prtypes.h 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Description: Definitions of NSPR's basic types 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Prototypes and macros used to make up for deficiencies in ANSI environments 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** that we have found. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Since we do not wrap <stdlib.h> and all the other standard headers, authors 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** of portable code will not know in general that they need these definitions. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Instead of requiring these authors to find the dependent uses in their code 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** and take the following steps only in those C files, we take steps once here 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** for all C files. 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)**/ 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef prtypes_h___ 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define prtypes_h___ 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef MDCPUCFG 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include MDCPUCFG 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "prcpucfg.h" 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <stddef.h> 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*********************************************************************** 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** MACROS: PR_EXTERN 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** PR_IMPLEMENT 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION: 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** These are only for externally visible routines and globals. For 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** internal routines, just use "extern" for type checking and that 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** will not export internal cross-file or forward-declared symbols. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Define a macro for declaring procedures return types. We use this to 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** deal with windoze specific type hackery for DLL definitions. Use 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** PR_EXTERN when the prototype for the method is declared. Use 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** PR_IMPLEMENT for the implementation of the method. 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Example: 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** in dowhim.h 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** PR_EXTERN( void ) DoWhatIMean( void ); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** in dowhim.c 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** PR_IMPLEMENT( void ) DoWhatIMean( void ) { return; } 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)***********************************************************************/ 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(WIN32) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT(__type) extern __declspec(dllexport) __type 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT(__type) __declspec(dllimport) __type 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT_DATA(__type) __declspec(dllimport) __type 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN(__type) extern __declspec(dllexport) __type 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT(__type) __declspec(dllexport) __type 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK_DECL 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_STATIC_CALLBACK(__x) static __x 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(XP_BEOS) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT(__type) extern __declspec(dllexport) __type 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT_DATA(__type) extern __declspec(dllexport) __type 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT(__type) extern __declspec(dllexport) __type 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT_DATA(__type) extern __declspec(dllexport) __type 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN(__type) extern __declspec(dllexport) __type 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT(__type) __declspec(dllexport) __type 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN_DATA(__type) extern __declspec(dllexport) __type 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT_DATA(__type) __declspec(dllexport) __type 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK_DECL 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_STATIC_CALLBACK(__x) static __x 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(WIN16) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK_DECL __cdecl 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(_WINDLL) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT(__type) extern __type _cdecl _export _loadds 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT(__type) extern __type _cdecl _export _loadds 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT_DATA(__type) extern __type _export 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT_DATA(__type) extern __type _export 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN(__type) extern __type _cdecl _export _loadds 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT(__type) __type _cdecl _export _loadds 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN_DATA(__type) extern __type _export 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT_DATA(__type) __type _export 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK __cdecl __loadds 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_STATIC_CALLBACK(__x) static __x PR_CALLBACK 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else /* this must be .EXE */ 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT(__type) extern __type _cdecl _export 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT(__type) extern __type _cdecl _export 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT_DATA(__type) extern __type _export 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT_DATA(__type) extern __type _export 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN(__type) extern __type _cdecl _export 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT(__type) __type _cdecl _export 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN_DATA(__type) extern __type _export 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT_DATA(__type) __type _export 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK __cdecl __loadds 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_STATIC_CALLBACK(__x) __x PR_CALLBACK 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* _WINDLL */ 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(XP_MAC) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT(__type) extern __declspec(export) __type 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT_DATA(__type) extern __declspec(export) __type 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT(__type) extern __declspec(export) __type 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT_DATA(__type) extern __declspec(export) __type 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN(__type) extern __declspec(export) __type 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT(__type) __declspec(export) __type 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN_DATA(__type) extern __declspec(export) __type 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT_DATA(__type) __declspec(export) __type 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK_DECL 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_STATIC_CALLBACK(__x) static __x 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else /* Unix */ 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT(__type) extern __type 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXPORT_DATA(__type) extern __type 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT(__type) extern __type 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPORT_DATA(__type) extern __type 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN(__type) extern __type 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT(__type) __type 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_EXTERN_DATA(__type) extern __type 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_IMPLEMENT_DATA(__type) __type 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_CALLBACK_DECL 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_STATIC_CALLBACK(__x) static __x 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(_NSPR_BUILD_) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_API(__type) PR_EXPORT(__type) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_DATA_API(__type) PR_EXPORT_DATA(__type) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_API(__type) PR_IMPORT(__type) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_DATA_API(__type) PR_IMPORT_DATA(__type) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*********************************************************************** 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** MACROS: PR_BEGIN_MACRO 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** PR_END_MACRO 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION: 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Macro body brackets so that macros with compound statement definitions 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** behave syntactically more like functions when called. 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)***********************************************************************/ 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_BEGIN_MACRO do { 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_END_MACRO } while (0) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*********************************************************************** 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** MACROS: PR_BEGIN_EXTERN_C 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** PR_END_EXTERN_C 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION: 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Macro shorthands for conditional C++ extern block delimiters. 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)***********************************************************************/ 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __cplusplus 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_BEGIN_EXTERN_C extern "C" { 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_END_EXTERN_C } 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_BEGIN_EXTERN_C 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_END_EXTERN_C 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*********************************************************************** 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** MACROS: PR_BIT 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** PR_BITMASK 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION: 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Bit masking macros. XXX n must be <= 31 to be portable 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)***********************************************************************/ 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_BIT(n) ((PRUint32)1 << (n)) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_BITMASK(n) (PR_BIT(n) - 1) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/*********************************************************************** 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** MACROS: PR_ROUNDUP 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** PR_MIN 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** PR_MAX 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** PR_ABS 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION: 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Commonly used macros for operations on compatible types. 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)***********************************************************************/ 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_ROUNDUP(x,y) ((((x)+((y)-1))/(y))*(y)) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_MIN(x,y) ((x)<(y)?(x):(y)) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_MAX(x,y) ((x)>(y)?(x):(y)) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_ABS(x) ((x)<0?-(x):(x)) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PR_BEGIN_EXTERN_C 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES: PRUint8 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** PRInt8 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION: 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** The int8 types are known to be 8 bits each. There is no type that 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** is equivalent to a plain "char". 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/ 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if PR_BYTES_PER_BYTE == 1 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned char PRUint8; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Some cfront-based C++ compilers do not like 'signed char' and 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** issue the warning message: 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** warning: "signed" not implemented (ignored) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** For these compilers, we have to define PRInt8 as plain 'char'. 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Make sure that plain 'char' is indeed signed under these compilers. 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if (defined(HPUX) && defined(__cplusplus) \ 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) && !defined(__GNUC__) && __cplusplus < 199707L) \ 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) || (defined(SCO) && defined(__cplusplus) \ 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) && !defined(__GNUC__) && __cplusplus == 1L) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef char PRInt8; 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef signed char PRInt8; 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error No suitable type for PRInt8/PRUint8 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * MACROS: PR_INT8_MAX 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * PR_INT8_MIN 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * PR_UINT8_MAX 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DESCRIPTION: 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The maximum and minimum values of a PRInt8 or PRUint8. 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/ 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_INT8_MAX 127 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_INT8_MIN (-128) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_UINT8_MAX 255U 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES: PRUint16 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** PRInt16 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION: 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** The int16 types are known to be 16 bits each. 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/ 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if PR_BYTES_PER_SHORT == 2 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned short PRUint16; 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef short PRInt16; 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error No suitable type for PRInt16/PRUint16 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * MACROS: PR_INT16_MAX 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * PR_INT16_MIN 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * PR_UINT16_MAX 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DESCRIPTION: 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The maximum and minimum values of a PRInt16 or PRUint16. 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/ 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_INT16_MAX 32767 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_INT16_MIN (-32768) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_UINT16_MAX 65535U 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES: PRUint32 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** PRInt32 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION: 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** The int32 types are known to be 32 bits each. 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/ 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if PR_BYTES_PER_INT == 4 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned int PRUint32; 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int PRInt32; 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_INT32(x) x 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_UINT32(x) x ## U 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif PR_BYTES_PER_LONG == 4 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned long PRUint32; 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef long PRInt32; 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_INT32(x) x ## L 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_UINT32(x) x ## UL 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error No suitable type for PRInt32/PRUint32 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * MACROS: PR_INT32_MAX 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * PR_INT32_MIN 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * PR_UINT32_MAX 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * DESCRIPTION: 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The maximum and minimum values of a PRInt32 or PRUint32. 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/ 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_INT32_MAX PR_INT32(2147483647) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_INT32_MIN (-PR_INT32_MAX - 1) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_UINT32_MAX PR_UINT32(4294967295) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES: PRUint64 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** PRInt64 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION: 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** The int64 types are known to be 64 bits each. Care must be used when 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** declaring variables of type PRUint64 or PRInt64. Different hardware 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** architectures and even different compilers have varying support for 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** 64 bit values. The only guaranteed portability requires the use of 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** the LL_ macros (see prlong.h). 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/ 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef HAVE_LONG_LONG 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if PR_BYTES_PER_LONG == 8 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef long PRInt64; 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned long PRUint64; 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(WIN16) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef __int64 PRInt64; 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned __int64 PRUint64; 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(WIN32) && !defined(__GNUC__) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef __int64 PRInt64; 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned __int64 PRUint64; 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef long long PRInt64; 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned long long PRUint64; 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* PR_BYTES_PER_LONG == 8 */ 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else /* !HAVE_LONG_LONG */ 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct { 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef IS_LITTLE_ENDIAN 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRUint32 lo, hi; 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PRUint32 hi, lo; 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} PRInt64; 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PRInt64 PRUint64; 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* !HAVE_LONG_LONG */ 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES: PRUintn 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** PRIntn 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION: 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** The PRIntn types are most appropriate for automatic variables. They are 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** guaranteed to be at least 16 bits, though various architectures may 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** define them to be wider (e.g., 32 or even 64 bits). These types are 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** never valid for fields of a structure. 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/ 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if PR_BYTES_PER_INT >= 2 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef int PRIntn; 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned int PRUintn; 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#error 'sizeof(int)' not sufficient for platform use 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES: PRFloat64 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION: 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** NSPR's floating point type is always 64 bits. 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/ 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef double PRFloat64; 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES: PRSize 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION: 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** A type for representing the size of objects. 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/ 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef size_t PRSize; 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES: PROffset32, PROffset64 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION: 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** A type for representing byte offsets from some location. 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/ 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PRInt32 PROffset32; 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PRInt64 PROffset64; 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES: PRPtrDiff 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION: 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** A type for pointer difference. Variables of this type are suitable 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** for storing a pointer or pointer sutraction. 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/ 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef ptrdiff_t PRPtrdiff; 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES: PRUptrdiff 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION: 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** A type for pointer difference. Variables of this type are suitable 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** for storing a pointer or pointer sutraction. 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/ 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned long PRUptrdiff; 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES: PRBool 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION: 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Use PRBool for variables and parameter types. Use PR_FALSE and PR_TRUE 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** for clarity of target type in assignments and actual arguments. Use 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** 'if (bool)', 'while (!bool)', '(bool) ? x : y' etc., to test booleans 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** juast as you would C int-valued conditions. 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/ 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PRIntn PRBool; 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_TRUE 1 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_FALSE 0 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/************************************************************************ 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** TYPES: PRPackedBool 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** DESCRIPTION: 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Use PRPackedBOol within structs where bitfields are not desireable 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** but minimum and consistant overhead matters. 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)************************************************************************/ 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PRUint8 PRPackedBool; 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Status code used by some routines that have a single point of failure or 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** special status return. 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef enum { PR_FAILURE = -1, PR_SUCCESS = 0 } PRStatus; 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef MOZ_UNICODE 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * EXPERIMENTAL: This type may be removed in a future release. 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef __PRUNICHAR__ 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define __PRUNICHAR__ 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(WIN32) || defined(XP_MAC) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef wchar_t PRUnichar; 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef PRUint16 PRUnichar; 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* MOZ_UNICODE */ 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** WARNING: The undocumented data types PRWord and PRUword are 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** only used in the garbage collection and arena code. Do not 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** use PRWord and PRUword in new code. 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** A PRWord is an integer that is the same size as a void*. 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** It implements the notion of a "word" in the Java Virtual 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Machine. (See Sec. 3.4 "Words", The Java Virtual Machine 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Specification, Addison-Wesley, September 1996. 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** http://java.sun.com/docs/books/vmspec/index.html.) 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef long PRWord; 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned long PRUword; 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(NO_NSPR_10_SUPPORT) 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/********* ???????????????? FIX ME ??????????????????????????? *****/ 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/********************** Some old definitions until pr=>ds transition is done ***/ 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/********************** Also, we are still using NSPR 1.0. GC ******************/ 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Fundamental NSPR macros, used nearly everywhere. 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PR_PUBLIC_API PR_IMPLEMENT 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Macro body brackets so that macros with compound statement definitions 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** behave syntactically more like functions when called. 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_BEGIN_MACRO do { 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_END_MACRO } while (0) 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)** Macro shorthands for conditional C++ extern block delimiters. 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)*/ 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef NSPR_BEGIN_EXTERN_C 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef NSPR_BEGIN_EXTERN_C 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef NSPR_END_EXTERN_C 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef NSPR_END_EXTERN_C 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __cplusplus 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_BEGIN_EXTERN_C extern "C" { 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_END_EXTERN_C } 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_BEGIN_EXTERN_C 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NSPR_END_EXTERN_C 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef XP_MAC 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "protypes.h" 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "obsolete/protypes.h" 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/********* ????????????? End Fix me ?????????????????????????????? *****/ 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* NO_NSPR_10_SUPPORT */ 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PR_END_EXTERN_C 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif /* prtypes_h___ */ 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 524