зеркало из https://github.com/mozilla/pjs.git
162 строки
5.4 KiB
C
162 строки
5.4 KiB
C
/* ***** BEGIN LICENSE BLOCK *****
|
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
*
|
|
* The contents of this file are subject to the Mozilla Public License Version
|
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
* http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
* for the specific language governing rights and limitations under the
|
|
* License.
|
|
*
|
|
* The Original Code is the Netscape security libraries.
|
|
*
|
|
* The Initial Developer of the Original Code is
|
|
* Netscape Communications Corporation.
|
|
* Portions created by the Initial Developer are Copyright (C) 1994-2000
|
|
* the Initial Developer. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*
|
|
* Alternatively, the contents of this file may be used under the terms of
|
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
* of those above. If you wish to allow use of your version of this file only
|
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
* use your version of this file under the terms of the MPL, indicate your
|
|
* decision by deleting the provisions above and replace them with the notice
|
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
* the provisions above, a recipient may use your version of this file under
|
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
*
|
|
* ***** END LICENSE BLOCK ***** */
|
|
|
|
#ifndef BASET_H
|
|
#define BASET_H
|
|
|
|
#ifdef DEBUG
|
|
static const char BASET_CVS_ID[] = "@(#) $RCSfile: baset.h,v $ $Revision: 1.7 $ $Date: 2004-04-25 15:03:02 $ $Name: $";
|
|
#endif /* DEBUG */
|
|
|
|
/*
|
|
* baset.h
|
|
*
|
|
* This file contains definitions for the basic types used throughout
|
|
* nss but not available publicly.
|
|
*/
|
|
|
|
#ifndef NSSBASET_H
|
|
#include "nssbaset.h"
|
|
#endif /* NSSBASET_H */
|
|
|
|
#include "plhash.h"
|
|
|
|
PR_BEGIN_EXTERN_C
|
|
|
|
/*
|
|
* nssArenaMark
|
|
*
|
|
* This type is used to mark the current state of an NSSArena.
|
|
*/
|
|
|
|
struct nssArenaMarkStr;
|
|
typedef struct nssArenaMarkStr nssArenaMark;
|
|
|
|
#ifdef DEBUG
|
|
/*
|
|
* ARENA_THREADMARK
|
|
*
|
|
* Optionally, this arena implementation can be compiled with some
|
|
* runtime checking enabled, which will catch the situation where
|
|
* one thread "marks" the arena, another thread allocates memory,
|
|
* and then the mark is released. Usually this is a surprise to
|
|
* the second thread, and this leads to weird runtime errors.
|
|
* Define ARENA_THREADMARK to catch these cases; we define it for all
|
|
* (internal and external) debug builds.
|
|
*/
|
|
#define ARENA_THREADMARK
|
|
|
|
/*
|
|
* ARENA_DESTRUCTOR_LIST
|
|
*
|
|
* Unfortunately, our pointer-tracker facility, used in debug
|
|
* builds to agressively fight invalid pointers, requries that
|
|
* pointers be deregistered when objects are destroyed. This
|
|
* conflicts with the standard arena usage where "memory-only"
|
|
* objects (that don't hold onto resources outside the arena)
|
|
* can be allocated in an arena, and never destroyed other than
|
|
* when the arena is destroyed. Therefore we have added a
|
|
* destructor-registratio facility to our arenas. This was not
|
|
* a simple decision, since we're getting ever-further away from
|
|
* the original arena philosophy. However, it was felt that
|
|
* adding this in debug builds wouldn't be so bad; as it would
|
|
* discourage them from being used for "serious" purposes.
|
|
* This facility requires ARENA_THREADMARK to be defined.
|
|
*/
|
|
#ifdef ARENA_THREADMARK
|
|
#define ARENA_DESTRUCTOR_LIST
|
|
#endif /* ARENA_THREADMARK */
|
|
|
|
#endif /* DEBUG */
|
|
|
|
typedef struct nssListStr nssList;
|
|
typedef struct nssListIteratorStr nssListIterator;
|
|
typedef PRBool (* nssListCompareFunc)(void *a, void *b);
|
|
typedef PRIntn (* nssListSortFunc)(void *a, void *b);
|
|
typedef void (* nssListElementDestructorFunc)(void *el);
|
|
|
|
typedef struct nssHashStr nssHash;
|
|
typedef void (PR_CALLBACK *nssHashIterator)(const void *key,
|
|
void *value,
|
|
void *arg);
|
|
|
|
/*
|
|
* nssPointerTracker
|
|
*
|
|
* This type is used in debug builds (both external and internal) to
|
|
* track our object pointers. Objects of this type must be statically
|
|
* allocated, which means the structure size must be available to the
|
|
* compiler. Therefore we must expose the contents of this structure.
|
|
* But please don't access elements directly; use the accessors.
|
|
*/
|
|
|
|
#ifdef DEBUG
|
|
struct nssPointerTrackerStr {
|
|
PRCallOnceType once;
|
|
PZLock *lock;
|
|
PLHashTable *table;
|
|
};
|
|
typedef struct nssPointerTrackerStr nssPointerTracker;
|
|
#endif /* DEBUG */
|
|
|
|
/*
|
|
* nssStringType
|
|
*
|
|
* There are several types of strings in the real world. We try to
|
|
* use only UTF8 and avoid the rest, but that's not always possible.
|
|
* So we have a couple converter routines to go to and from the other
|
|
* string types. We have to be able to specify those string types,
|
|
* so we have this enumeration.
|
|
*/
|
|
|
|
enum nssStringTypeEnum {
|
|
nssStringType_DirectoryString,
|
|
nssStringType_TeletexString, /* Not "teletext" with trailing 't' */
|
|
nssStringType_PrintableString,
|
|
nssStringType_UniversalString,
|
|
nssStringType_BMPString,
|
|
nssStringType_UTF8String,
|
|
nssStringType_PHGString,
|
|
nssStringType_GeneralString,
|
|
|
|
nssStringType_Unknown = -1
|
|
};
|
|
typedef enum nssStringTypeEnum nssStringType;
|
|
|
|
PR_END_EXTERN_C
|
|
|
|
#endif /* BASET_H */
|