|
|
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: /* GLOBAL FUNCTIONS: ! 36: ** DESCRIPTION: ! 37: ** PR Atomic operations ! 38: */ ! 39: ! 40: #ifndef pratom_h___ ! 41: #define pratom_h___ ! 42: ! 43: #include "prtypes.h" ! 44: #include "prlock.h" ! 45: ! 46: PR_BEGIN_EXTERN_C ! 47: ! 48: /* ! 49: ** FUNCTION: PR_AtomicIncrement ! 50: ** DESCRIPTION: ! 51: ** Atomically increment a 32 bit value. ! 52: ** INPUTS: ! 53: ** val: a pointer to the value to increment ! 54: ** RETURN: ! 55: ** the returned value is the result of the increment ! 56: */ ! 57: NSPR_API(PRInt32) PR_AtomicIncrement(PRInt32 *val); ! 58: ! 59: /* ! 60: ** FUNCTION: PR_AtomicDecrement ! 61: ** DESCRIPTION: ! 62: ** Atomically decrement a 32 bit value. ! 63: ** INPUTS: ! 64: ** val: a pointer to the value to decrement ! 65: ** RETURN: ! 66: ** the returned value is the result of the decrement ! 67: */ ! 68: NSPR_API(PRInt32) PR_AtomicDecrement(PRInt32 *val); ! 69: ! 70: /* ! 71: ** FUNCTION: PR_AtomicSet ! 72: ** DESCRIPTION: ! 73: ** Atomically set a 32 bit value. ! 74: ** INPUTS: ! 75: ** val: A pointer to a 32 bit value to be set ! 76: ** newval: The newvalue to assign to val ! 77: ** RETURN: ! 78: ** Returns the prior value ! 79: */ ! 80: NSPR_API(PRInt32) PR_AtomicSet(PRInt32 *val, PRInt32 newval); ! 81: ! 82: /* ! 83: ** FUNCTION: PR_AtomicAdd ! 84: ** DESCRIPTION: ! 85: ** Atomically add a 32 bit value. ! 86: ** INPUTS: ! 87: ** ptr: a pointer to the value to increment ! 88: ** val: value to be added ! 89: ** RETURN: ! 90: ** the returned value is the result of the addition ! 91: */ ! 92: NSPR_API(PRInt32) PR_AtomicAdd(PRInt32 *ptr, PRInt32 val); ! 93: ! 94: /* ! 95: ** LIFO linked-list (stack) ! 96: */ ! 97: typedef struct PRStackElemStr PRStackElem; ! 98: ! 99: struct PRStackElemStr { ! 100: PRStackElem *prstk_elem_next; /* next pointer MUST be at offset 0; ! 101: assembly language code relies on this */ ! 102: }; ! 103: ! 104: typedef struct PRStackStr PRStack; ! 105: ! 106: /* ! 107: ** FUNCTION: PR_CreateStack ! 108: ** DESCRIPTION: ! 109: ** Create a stack, a LIFO linked list ! 110: ** INPUTS: ! 111: ** stack_name: a pointer to string containing the name of the stack ! 112: ** RETURN: ! 113: ** A pointer to the created stack, if successful, else NULL. ! 114: */ ! 115: NSPR_API(PRStack *) PR_CreateStack(const char *stack_name); ! 116: ! 117: /* ! 118: ** FUNCTION: PR_StackPush ! 119: ** DESCRIPTION: ! 120: ** Push an element on the top of the stack ! 121: ** INPUTS: ! 122: ** stack: pointer to the stack ! 123: ** stack_elem: pointer to the stack element ! 124: ** RETURN: ! 125: ** None ! 126: */ ! 127: NSPR_API(void) PR_StackPush(PRStack *stack, PRStackElem *stack_elem); ! 128: ! 129: /* ! 130: ** FUNCTION: PR_StackPop ! 131: ** DESCRIPTION: ! 132: ** Remove the element on the top of the stack ! 133: ** INPUTS: ! 134: ** stack: pointer to the stack ! 135: ** RETURN: ! 136: ** A pointer to the stack element removed from the top of the stack, ! 137: ** if non-empty, ! 138: ** else NULL ! 139: */ ! 140: NSPR_API(PRStackElem *) PR_StackPop(PRStack *stack); ! 141: ! 142: /* ! 143: ** FUNCTION: PR_DestroyStack ! 144: ** DESCRIPTION: ! 145: ** Destroy the stack ! 146: ** INPUTS: ! 147: ** stack: pointer to the stack ! 148: ** RETURN: ! 149: ** PR_SUCCESS - if successfully deleted ! 150: ** PR_FAILURE - if the stack is not empty ! 151: ** PR_GetError will return ! 152: ** PR_INVALID_STATE_ERROR - stack is not empty ! 153: */ ! 154: NSPR_API(PRStatus) PR_DestroyStack(PRStack *stack); ! 155: ! 156: PR_END_EXTERN_C ! 157: ! 158: #endif /* pratom_h___ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.