Annotation of sbbs/javascript/include/mozilla/nspr/prcountr.h, revision 1.1.1.1

1.1       root        1: /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
                      2: /* 
                      3:  * The contents of this file are subject to the Mozilla Public
                      4:  * License Version 1.1 (the "License"); you may not use this file
                      5:  * except in compliance with the License. You may obtain a copy of
                      6:  * the License at http://www.mozilla.org/MPL/
                      7:  * 
                      8:  * Software distributed under the License is distributed on an "AS
                      9:  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
                     10:  * implied. See the License for the specific language governing
                     11:  * rights and limitations under the License.
                     12:  * 
                     13:  * The Original Code is the Netscape Portable Runtime (NSPR).
                     14:  * 
                     15:  * The Initial Developer of the Original Code is Netscape
                     16:  * Communications Corporation.  Portions created by Netscape are 
                     17:  * Copyright (C) 1998-2000 Netscape Communications Corporation.  All
                     18:  * Rights Reserved.
                     19:  * 
                     20:  * Contributor(s):
                     21:  * 
                     22:  * Alternatively, the contents of this file may be used under the
                     23:  * terms of the GNU General Public License Version 2 or later (the
                     24:  * "GPL"), in which case the provisions of the GPL are applicable 
                     25:  * instead of those above.  If you wish to allow use of your 
                     26:  * version of this file only under the terms of the GPL and not to
                     27:  * allow others to use your version of this file under the MPL,
                     28:  * indicate your decision by deleting the provisions above and
                     29:  * replace them with the notice and other provisions required by
                     30:  * the GPL.  If you do not delete the provisions above, a recipient
                     31:  * may use your version of this file under either the MPL or the
                     32:  * GPL.
                     33:  */
                     34: 
                     35: #ifndef prcountr_h___
                     36: #define prcountr_h___
                     37: 
                     38: /*----------------------------------------------------------------------------
                     39: ** prcountr.h -- NSPR Instrumentation counters
                     40: **
                     41: ** The NSPR Counter Feature provides a means to "count
                     42: ** something." Counters can be dynamically defined, incremented,
                     43: ** decremented, set, and deleted under application program
                     44: ** control.
                     45: **                                                                                    
                     46: ** The Counter Feature is intended to be used as instrumentation,                  
                     47: ** not as operational data. If you need a counter for operational                  
                     48: ** data, use native integral types.                                                
                     49: **                                                                                    
                     50: ** Counters are 32bit unsigned intergers. On overflow, a counter                   
                     51: ** will wrap. No exception is recognized or reported.                              
                     52: **                                                                                 
                     53: ** A counter can be dynamically created using a two level naming
                     54: ** convention. A "handle" is returned when the counter is
                     55: ** created. The counter can subsequently be addressed by its
                     56: ** handle. An API is provided to get an existing counter's handle
                     57: ** given the names with  which it was originally created. 
                     58: ** Similarly, a counter's name can be retrieved given its handle.
                     59: ** 
                     60: ** The counter naming convention is a two-level hierarchy. The
                     61: ** QName is the higher level of the hierarchy; RName is the
                     62: ** lower level. RNames can be thought of as existing within a
                     63: ** QName. The same RName can exist within multiple QNames. QNames
                     64: ** are unique. The NSPR Counter is not a near-zero overhead
                     65: ** feature. Application designers should be aware of 
                     66: ** serialization issues when using the Counter API. Creating a
                     67: ** counter locks a large asset, potentially causing a stall. This
                     68: ** suggest that applications should create counters at component
                     69: ** initialization, for example, and not create and destroy them
                     70: ** willy-nilly. ... You have been warned.
                     71: ** 
                     72: ** Incrementing and Adding to counters uses atomic operations.
                     73: ** The performance of these operations will vary from platform
                     74: ** to platform. On platforms where atomic operations are not
                     75: ** supported the overhead may be substantial.
                     76: ** 
                     77: ** When traversing the counter database with FindNext functions,
                     78: ** the instantaneous values of any given counter is that at the
                     79: ** moment of extraction. The state of the entire counter database
                     80: ** may not be viewed as atomic.
                     81: ** 
                     82: ** The counter interface may be disabled (No-Op'd) at compile
                     83: ** time. When DEBUG is defined at compile time, the Counter
                     84: ** Feature is compiled into NSPR and applications invoking it.
                     85: ** When DEBUG is not defined, the counter macros compile to
                     86: ** nothing. To force the Counter Feature to be compiled into an
                     87: ** optimized build, define FORCE_NSPR_COUNTERS at compile time
                     88: ** for both NSPR and the application intending to use it.
                     89: ** 
                     90: ** Application designers should use the macro form of the Counter
                     91: ** Feature methods to minimize performance impact in optimized
                     92: ** builds. The macros normally compile to nothing on optimized
                     93: ** builds.
                     94: ** 
                     95: ** Application designers should be aware of the effects of
                     96: ** debug and optimized build differences when using result of the
                     97: ** Counter Feature macros in expressions.
                     98: ** 
                     99: ** The Counter Feature is thread-safe and SMP safe.
                    100: ** 
                    101: ** /lth. 09-Jun-1998.
                    102: */
                    103: 
                    104: #include "prtypes.h"
                    105: 
                    106: PR_BEGIN_EXTERN_C
                    107: 
                    108: /*
                    109: ** Opaque counter handle type.
                    110: ** ... don't even think of looking in here.
                    111: **
                    112: */
                    113: typedef void *  PRCounterHandle;
                    114: 
                    115: #define PRCOUNTER_NAME_MAX 31
                    116: #define PRCOUNTER_DESC_MAX 255
                    117: 
                    118: 
                    119: 
                    120: /* -----------------------------------------------------------------------
                    121: ** FUNCTION: PR_DEFINE_COUNTER() -- Define a PRCounterHandle
                    122: ** 
                    123: ** DESCRIPTION: PR_DEFINE_COUNTER() is used to define a counter
                    124: ** handle.
                    125: ** 
                    126: */
                    127: #define PR_DEFINE_COUNTER(name) PRCounterHandle name
                    128: 
                    129: /* -----------------------------------------------------------------------
                    130: ** FUNCTION: PR_INIT_COUNTER_HANDLE() -- Set the value of a PRCounterHandle
                    131: ** 
                    132: ** DESCRIPTION: 
                    133: ** PR_INIT_COUNTER_HANDLE() sets the value of a PRCounterHandle
                    134: ** to value.
                    135: ** 
                    136: */
                    137: #if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
                    138: #define PR_INIT_COUNTER_HANDLE(handle,value)\
                    139:     (handle) = (PRCounterHandle)(value)
                    140: #else
                    141: #define PR_INIT_COUNTER_HANDLE(handle,value)
                    142: #endif
                    143: 
                    144: /* -----------------------------------------------------------------------
                    145: ** FUNCTION: PR_CreateCounter() -- Create a counter
                    146: ** 
                    147: ** DESCRIPTION: PR_CreateCounter() creates a counter object and
                    148: ** initializes it to zero.
                    149: ** 
                    150: ** The macro form takes as its first argument the name of the
                    151: ** PRCounterHandle to receive the handle returned from
                    152: ** PR_CreateCounter().
                    153: ** 
                    154: ** INPUTS:
                    155: **  qName: The QName for the counter object. The maximum length
                    156: ** of qName is defined by PRCOUNTER_NAME_MAX
                    157: ** 
                    158: **  rName: The RName for the counter object. The maximum length
                    159: ** of qName is defined by PRCOUNTER_NAME_MAX
                    160: ** 
                    161: **  descrioption: The description of the counter object. The
                    162: ** maximum length of description is defined by
                    163: ** PRCOUNTER_DESC_MAX.
                    164: ** 
                    165: ** OUTPUTS:
                    166: ** 
                    167: ** RETURNS:
                    168: **  PRCounterHandle.
                    169: ** 
                    170: ** RESTRICTIONS:
                    171: ** 
                    172: */
                    173: #if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
                    174: #define PR_CREATE_COUNTER(handle,qName,rName,description)\
                    175:    (handle) = PR_CreateCounter((qName),(rName),(description))
                    176: #else
                    177: #define PR_CREATE_COUNTER(handle,qName,rName,description)
                    178: #endif
                    179: 
                    180: NSPR_API(PRCounterHandle) 
                    181:    PR_CreateCounter( 
                    182:        const char *qName, 
                    183:        const char *rName, 
                    184:         const char *description 
                    185: );
                    186: 
                    187: /* -----------------------------------------------------------------------
                    188: ** FUNCTION: PR_DestroyCounter() -- Destroy a counter object.
                    189: ** 
                    190: ** DESCRIPTION: PR_DestroyCounter() removes a counter and
                    191: ** unregisters its handle from the counter database.
                    192: ** 
                    193: ** INPUTS:
                    194: **  handle: the PRCounterHandle of the counter to be destroyed.
                    195: ** 
                    196: ** OUTPUTS: 
                    197: **  The counter is destroyed.
                    198: ** 
                    199: ** RETURNS: void
                    200: ** 
                    201: ** RESTRICTIONS:
                    202: ** 
                    203: */
                    204: #if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
                    205: #define PR_DESTROY_COUNTER(handle) PR_DestroyCounter((handle))
                    206: #else
                    207: #define PR_DESTROY_COUNTER(handle)
                    208: #endif
                    209: 
                    210: NSPR_API(void) 
                    211:    PR_DestroyCounter( 
                    212:        PRCounterHandle handle 
                    213: );
                    214: 
                    215: 
                    216: /* -----------------------------------------------------------------------
                    217: ** FUNCTION: PR_GetCounterHandleFromName() -- Retreive a
                    218: ** counter's handle give its name.
                    219: ** 
                    220: ** DESCRIPTION: PR_GetCounterHandleFromName() retreives a
                    221: ** counter's handle from the counter database, given the name
                    222: ** the counter was originally created with.
                    223: ** 
                    224: ** INPUTS:
                    225: **  qName: Counter's original QName.
                    226: **  rName: Counter's original RName.
                    227: ** 
                    228: ** OUTPUTS:
                    229: ** 
                    230: ** RETURNS: 
                    231: **  PRCounterHandle or PRCounterError.
                    232: ** 
                    233: ** RESTRICTIONS:
                    234: ** 
                    235: */
                    236: #if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
                    237: #define PR_GET_COUNTER_HANDLE_FROM_NAME(handle,qName,rName)\
                    238:     (handle) = PR_GetCounterHandleFromName((qName),(rName))
                    239: #else
                    240: #define PR_GET_COUNTER_HANDLE_FROM_NAME(handle,qName,rName)
                    241: #endif
                    242: 
                    243: NSPR_API(PRCounterHandle) 
                    244:    PR_GetCounterHandleFromName( 
                    245:        const char *qName, 
                    246:        const char *rName 
                    247: );
                    248: 
                    249: /* -----------------------------------------------------------------------
                    250: ** FUNCTION: PR_GetCounterNameFromHandle() -- Retreive a
                    251: ** counter's name, given its handle.
                    252: ** 
                    253: ** DESCRIPTION: PR_GetCounterNameFromHandle() retreives a
                    254: ** counter's name given its handle.
                    255: ** 
                    256: ** INPUTS:
                    257: **  qName: Where to store a pointer to qName.
                    258: **  rName: Where to store a pointer to rName.
                    259: **  description: Where to store a pointer to description.
                    260: ** 
                    261: ** OUTPUTS: Pointers to the Counter Feature's copies of the names
                    262: ** used when the counters were created.
                    263: ** 
                    264: ** RETURNS: void
                    265: ** 
                    266: ** RESTRICTIONS:
                    267: ** 
                    268: */
                    269: #if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
                    270: #define PR_GET_COUNTER_NAME_FROM_HANDLE(handle,qName,rName,description)\
                    271:     PR_GetCounterNameFromHandle((handle),(qName),(rName),(description))
                    272: #else
                    273: #define PR_GET_COUNTER_NAME_FROM_HANDLE(handle,qName,rName,description )
                    274: #endif
                    275: 
                    276: NSPR_API(void) 
                    277:    PR_GetCounterNameFromHandle( 
                    278:        PRCounterHandle handle,  
                    279:        const char **qName, 
                    280:        const char **rName, 
                    281:        const char **description 
                    282: );
                    283: 
                    284: 
                    285: /* -----------------------------------------------------------------------
                    286: ** FUNCTION: PR_IncrementCounter() -- Add one to the referenced
                    287: ** counter.
                    288: ** 
                    289: ** DESCRIPTION: Add one to the referenced counter.
                    290: ** 
                    291: ** INPUTS:
                    292: **  handle: The PRCounterHandle of the counter to be incremented
                    293: ** 
                    294: ** OUTPUTS: The counter is incrementd.
                    295: ** 
                    296: ** RETURNS: void
                    297: ** 
                    298: ** RESTRICTIONS:
                    299: ** 
                    300: */
                    301: #if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
                    302: #define PR_INCREMENT_COUNTER(handle) PR_IncrementCounter(handle)
                    303: #else
                    304: #define PR_INCREMENT_COUNTER(handle)
                    305: #endif
                    306: 
                    307: NSPR_API(void) 
                    308:    PR_IncrementCounter( 
                    309:        PRCounterHandle handle
                    310: );
                    311: 
                    312: 
                    313: /* -----------------------------------------------------------------------
                    314: ** FUNCTION: PR_DecrementCounter() -- Subtract one from the
                    315: ** referenced counter
                    316: ** 
                    317: ** DESCRIPTION: Subtract one from the referenced counter.
                    318: ** 
                    319: ** INPUTS: 
                    320: **  handle: The PRCounterHandle of the coutner to be
                    321: ** decremented.
                    322: ** 
                    323: ** OUTPUTS: the counter is decremented.
                    324: ** 
                    325: ** RETURNS: void
                    326: ** 
                    327: ** RESTRICTIONS:
                    328: ** 
                    329: */
                    330: #if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
                    331: #define PR_DECREMENT_COUNTER(handle) PR_DecrementCounter(handle)
                    332: #else
                    333: #define PR_DECREMENT_COUNTER(handle)
                    334: #endif
                    335: 
                    336: NSPR_API(void) 
                    337:    PR_DecrementCounter( 
                    338:        PRCounterHandle handle
                    339: );
                    340: 
                    341: /* -----------------------------------------------------------------------
                    342: ** FUNCTION: PR_AddToCounter() -- Add a value to a counter.
                    343: ** 
                    344: ** DESCRIPTION: Add value to the counter referenced by handle.
                    345: ** 
                    346: ** INPUTS:
                    347: **  handle: the PRCounterHandle of the counter to be added to.
                    348: ** 
                    349: **  value: the value to be added to the counter.
                    350: ** 
                    351: ** OUTPUTS: new value for counter.
                    352: ** 
                    353: ** RETURNS: void
                    354: ** 
                    355: ** RESTRICTIONS:
                    356: ** 
                    357: */
                    358: #if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
                    359: #define PR_ADD_TO_COUNTER(handle,value)\
                    360:     PR_AddToCounter((handle),(value))
                    361: #else
                    362: #define PR_ADD_TO_COUNTER(handle,value)
                    363: #endif
                    364: 
                    365: NSPR_API(void) 
                    366:    PR_AddToCounter( 
                    367:        PRCounterHandle handle, 
                    368:        PRUint32 value 
                    369: );
                    370: 
                    371: 
                    372: /* -----------------------------------------------------------------------
                    373: ** FUNCTION: PR_SubtractFromCounter() -- A value is subtracted
                    374: ** from a counter.
                    375: ** 
                    376: ** DESCRIPTION:
                    377: ** Subtract a value from a counter.
                    378: ** 
                    379: ** INPUTS:
                    380: **  handle: the PRCounterHandle of the counter to be subtracted
                    381: ** from.
                    382: ** 
                    383: **  value: the value to be subtracted from the counter.
                    384: ** 
                    385: ** OUTPUTS: new value for counter
                    386: ** 
                    387: ** RETURNS: void
                    388: ** 
                    389: ** RESTRICTIONS:
                    390: ** 
                    391: */
                    392: #if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
                    393: #define PR_SUBTRACT_FROM_COUNTER(handle,value)\
                    394:     PR_SubtractFromCounter((handle),(value))
                    395: #else
                    396: #define PR_SUBTRACT_FROM_COUNTER(handle,value)
                    397: #endif
                    398: 
                    399: NSPR_API(void) 
                    400:    PR_SubtractFromCounter( 
                    401:        PRCounterHandle handle, 
                    402:        PRUint32 value 
                    403: );
                    404: 
                    405: 
                    406: /* -----------------------------------------------------------------------
                    407: ** FUNCTION: PR_GetCounter() -- Retreive the value of a counter
                    408: ** 
                    409: ** DESCRIPTION:
                    410: ** Retreive the value of a counter.
                    411: ** 
                    412: ** INPUTS:
                    413: **  handle: the PR_CounterHandle of the counter to be retreived
                    414: ** 
                    415: ** OUTPUTS:
                    416: ** 
                    417: ** RETURNS: The value of the referenced counter
                    418: ** 
                    419: ** RESTRICTIONS:
                    420: ** 
                    421: */
                    422: #if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
                    423: #define PR_GET_COUNTER(counter,handle)\
                    424:     (counter) = PR_GetCounter((handle))
                    425: #else
                    426: #define PR_GET_COUNTER(counter,handle) 0
                    427: #endif
                    428: 
                    429: NSPR_API(PRUint32) 
                    430:    PR_GetCounter( 
                    431:        PRCounterHandle handle 
                    432: );
                    433: 
                    434: /* -----------------------------------------------------------------------
                    435: ** FUNCTION: PR_SetCounter() -- Replace the content of counter
                    436: ** with value.
                    437: ** 
                    438: ** DESCRIPTION: The contents of the referenced counter are
                    439: ** replaced by value.
                    440: ** 
                    441: ** INPUTS:
                    442: **  handle: the PRCounterHandle of the counter whose contents
                    443: ** are to be replaced.
                    444: ** 
                    445: **  value: the new value of the counter.
                    446: ** 
                    447: ** OUTPUTS:
                    448: ** 
                    449: ** RETURNS: void
                    450: ** 
                    451: ** RESTRICTIONS:
                    452: ** 
                    453: */
                    454: #if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
                    455: #define PR_SET_COUNTER(handle,value) PR_SetCounter((handle),(value))
                    456: #else
                    457: #define PR_SET_COUNTER(handle,value)
                    458: #endif
                    459: 
                    460: NSPR_API(void) 
                    461:    PR_SetCounter( 
                    462:        PRCounterHandle handle, 
                    463:        PRUint32 value 
                    464: );
                    465: 
                    466: 
                    467: /* -----------------------------------------------------------------------
                    468: ** FUNCTION: PR_FindNextCounterQname() -- Retreive the next QName counter
                    469: ** handle iterator
                    470: ** 
                    471: ** DESCRIPTION:
                    472: ** PR_FindNextCounterQname() retreives the first or next Qname
                    473: ** the counter data base, depending on the value of handle. When
                    474: ** handle is NULL, the function attempts to retreive the first
                    475: ** QName handle in the database. When handle is a handle previosly
                    476: ** retreived QName handle, then the function attempts to retreive
                    477: ** the next QName handle.
                    478: ** 
                    479: ** INPUTS: 
                    480: **  handle: PRCounterHandle or NULL.
                    481: ** 
                    482: ** OUTPUTS: returned
                    483: ** 
                    484: ** RETURNS: PRCounterHandle or NULL when no more QName counter
                    485: ** handles are present.
                    486: ** 
                    487: ** RESTRICTIONS:
                    488: **  A concurrent PR_CreateCounter() or PR_DestroyCounter() may
                    489: ** cause unpredictable results.
                    490: ** 
                    491: ** A PRCounterHandle returned from this function may only be used
                    492: ** in another PR_FindNextCounterQname() function call; other
                    493: ** operations may cause unpredictable results.
                    494: ** 
                    495: */
                    496: #if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
                    497: #define PR_FIND_NEXT_COUNTER_QNAME(next,handle)\
                    498:     (next) = PR_FindNextCounterQname((handle))
                    499: #else
                    500: #define PR_FIND_NEXT_COUNTER_QNAME(next,handle) NULL
                    501: #endif
                    502: 
                    503: NSPR_API(PRCounterHandle) 
                    504:    PR_FindNextCounterQname( 
                    505:         PRCounterHandle handle
                    506: );
                    507: 
                    508: /* -----------------------------------------------------------------------
                    509: ** FUNCTION: PR_FindNextCounterRname() -- Retreive the next RName counter
                    510: ** handle iterator
                    511: ** 
                    512: ** DESCRIPTION:
                    513: ** PR_FindNextCounterRname() retreives the first or next RNname
                    514: ** handle from the counter data base, depending on the
                    515: ** value of handle. When handle is NULL, the function attempts to
                    516: ** retreive the first RName handle in the database. When handle is
                    517: ** a handle previosly retreived RName handle, then the function
                    518: ** attempts to retreive the next RName handle.
                    519: ** 
                    520: ** INPUTS:
                    521: **  handle: PRCounterHandle or NULL.
                    522: **  qhandle: PRCounterHandle of a previously aquired via
                    523: ** PR_FIND_NEXT_QNAME_HANDLE()
                    524: ** 
                    525: ** OUTPUTS: returned
                    526: ** 
                    527: ** RETURNS: PRCounterHandle or NULL when no more RName counter
                    528: ** handles are present.
                    529: ** 
                    530: ** RESTRICTIONS:
                    531: **  A concurrent PR_CreateCounter() or PR_DestroyCounter() may
                    532: ** cause unpredictable results.
                    533: ** 
                    534: ** A PRCounterHandle returned from this function may only be used
                    535: ** in another PR_FindNextCounterRname() function call; other
                    536: ** operations may cause unpredictable results.
                    537: ** 
                    538: */
                    539: #if defined(DEBUG) || defined(FORCE_NSPR_COUNTERS)
                    540: #define PR_FIND_NEXT_COUNTER_RNAME(next,rhandle,qhandle)\
                    541:     (next) = PR_FindNextCounterRname((rhandle),(qhandle))
                    542: #else
                    543: #define PR_FIND_NEXT_COUNTER_RNAME(next,rhandle,qhandle)
                    544: #endif
                    545: 
                    546: NSPR_API(PRCounterHandle) 
                    547:    PR_FindNextCounterRname( 
                    548:         PRCounterHandle rhandle,
                    549:         PRCounterHandle qhandle
                    550: );
                    551: 
                    552: PR_END_EXTERN_C
                    553: 
                    554: #endif /* prcountr_h___ */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.