DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (c68fe15a81fc)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
/* This Source Code Form is subject to the terms of the Mozilla Public
/* 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
#define BASET_H

/*
 * baset.h
 *
 * This file contains definitions for the basic types used throughout
 * This file contains definitions for the basic types used throughout
 * nss but not available publicly.
 */

#ifndef NSSBASET_H
#include "nssbaset.h"
#include "nssbaset.h"
#endif /* NSSBASET_H */

#include "plhash.h"

PR_BEGIN_EXTERN_C
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
 * 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
 * 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
 * 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
 * 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.
 * 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 PRBool (*nssListCompareFunc)(void *a, void *b);
typedef PRIntn (*nssListSortFunc)(void *a, void *b);
typedef void (*nssListElementDestructorFunc)(void *el);
typedef void (*nssListElementDestructorFunc)(void *el);

typedef struct nssHashStr nssHash;
typedef void(PR_CALLBACK *nssHashIterator)(const void *key, void *value,
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.
 * But please don't access elements directly; use the accessors.
 */

#ifdef DEBUG
struct nssPointerTrackerStr {
    PRCallOnceType once;
    PRCallOnceType once;
    PZLock *lock;
    PLHashTable *table;
};
typedef struct nssPointerTrackerStr nssPointerTracker;
#endif /* DEBUG */
#endif /* DEBUG */

/*
 * nssStringType
 *
 * There are several types of strings in the real world.  We try to
 * 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_TeletexString, /* Not "teletext" with trailing 't' */
    nssStringType_PrintableString,
    nssStringType_UniversalString,
    nssStringType_BMPString,
    nssStringType_UTF8String,
    nssStringType_PHGString,
    nssStringType_PHGString,
    nssStringType_GeneralString,

    nssStringType_Unknown = -1
};
typedef enum nssStringTypeEnum nssStringType;
typedef enum nssStringTypeEnum nssStringType;

PR_END_EXTERN_C

#endif /* BASET_H */