зеркало из https://github.com/mozilla/gecko-dev.git
125 строки
3.8 KiB
C
125 строки
3.8 KiB
C
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef BASET_H
|
|
#define BASET_H
|
|
|
|
/*
|
|
* 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 */
|