collectn.h
上传用户:lyxiangda
上传日期:2007-01-12
资源大小:3042k
文件大小:6k
源码类别:

CA认证

开发平台:

WINDOWS

  1. /*
  2.  * The contents of this file are subject to the Mozilla Public
  3.  * License Version 1.1 (the "License"); you may not use this file
  4.  * except in compliance with the License. You may obtain a copy of
  5.  * the License at http://www.mozilla.org/MPL/
  6.  * 
  7.  * Software distributed under the License is distributed on an "AS
  8.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9.  * implied. See the License for the specific language governing
  10.  * rights and limitations under the License.
  11.  * 
  12.  * The Original Code is the Netscape security libraries.
  13.  * 
  14.  * The Initial Developer of the Original Code is Netscape
  15.  * Communications Corporation.  Portions created by Netscape are 
  16.  * Copyright (C) 1994-2000 Netscape Communications Corporation.  All
  17.  * Rights Reserved.
  18.  * 
  19.  * Contributor(s):
  20.  * 
  21.  * Alternatively, the contents of this file may be used under the
  22.  * terms of the GNU General Public License Version 2 or later (the
  23.  * "GPL"), in which case the provisions of the GPL are applicable 
  24.  * instead of those above.  If you wish to allow use of your 
  25.  * version of this file only under the terms of the GPL and not to
  26.  * allow others to use your version of this file under the MPL,
  27.  * indicate your decision by deleting the provisions above and
  28.  * replace them with the notice and other provisions required by
  29.  * the GPL.  If you do not delete the provisions above, a recipient
  30.  * may use your version of this file under either the MPL or the
  31.  * GPL.
  32.  */
  33. #ifndef __COLLECTN_H__
  34. #define __COLLECTN_H__
  35. #include "prtypes.h"
  36. #include "prmon.h"
  37. #include "prclist.h"
  38. #include "ssmdefs.h"
  39. /* definitions for priority */
  40. #define SSM_PRIORITY_ANY -1
  41. #define SSM_PRIORITY_NORMAL 0
  42. #define SSM_PRIORITY_UI 1
  43. #define SSM_PRIORITY_SHUTDOWN 30 /* always pull this if it's available */
  44. #define SSM_PRIORITY_MAX 31
  45. /* This is an ordered collection of items without repetition. */
  46. /* This is to be used as a link in a PRCList.
  47.  * You can cast any of the PRCList *'s in the list to one of these.
  48.  *  See prclist.h for details.
  49.  */
  50. typedef struct _SSMListItem
  51. {
  52.     PRCList link;
  53.     PRIntn  priority;
  54.     void *data;
  55. } SSMListItem;
  56. /* An ordered collection, implemented in terms of PRCList. */
  57. struct _SSMCollection
  58. {
  59.     PRMonitor *lock;
  60.     PRIntn nItems;
  61.     PRIntn priorityCount[SSM_PRIORITY_MAX+1];
  62.     PRCList list;
  63. };
  64. typedef struct _SSMCollection SSMCollection;
  65. /************************************************************
  66. ** FUNCTION: SSM_NewCollection
  67. ** RETURNS:
  68. **   SSMCollection *
  69. **     returns a pointer to a new SSMCollection.
  70. **     return NULL on error.
  71. **
  72. *************************************************************/
  73. SSMCollection *SSM_NewCollection(void);
  74. /************************************************************
  75. ** FUNCTION: SSM_DestroyCollection
  76. ** INPUTS:
  77. **   victim
  78. **     The collection to be destroyed.
  79. ** RETURNS:
  80. **   PR_SUCCESS on success.
  81. **   PR_FAILURE on failure.  This can't happen (yet).
  82. **
  83. *************************************************************/
  84. SSMStatus SSM_DestroyCollection(SSMCollection *victim);
  85. /************************************************************
  86. ** FUNCTION: SSM_Enqueue
  87. ** DESCRIPTION: Append (item) to (list).
  88. ** INPUTS:
  89. **   list
  90. **     The collection to be added to.
  91. **   priority
  92. **     The priority of the new item in the queue.
  93. **   item
  94. **     The data item to be enqueued.
  95. ** RETURNS:
  96. **   PR_SUCCESS on success.
  97. **   PR_FAILURE on failure.
  98. **
  99. *************************************************************/
  100. SSMStatus SSM_Enqueue(SSMCollection *list, PRIntn priority, void *item);
  101. /************************************************************
  102. ** FUNCTION: SSM_Dequeue
  103. ** DESCRIPTION: Retrieve a data item from the head of (list).
  104. ** INPUTS:
  105. **   list
  106. **     The collection to be retrieved from.
  107. **   priority
  108. **     The priority level of items to be removed from the queue. 
  109. **     Anything below the given priority level is ignored. 
  110. **     Pass SSM_PRIORITY_ANY to fetch the first item from the 
  111. **     queue regardless of priority.
  112. **   doBlock
  113. **     PR_TRUE if the function should block on an empty collection.
  114. **     PR_FALSE if the function should not block.
  115. ** OUTPUTS:
  116. **   item
  117. **     A pointer to the void * to hold the retrieved item.
  118. ** RETURNS:
  119. **   PR_SUCCESS on success.
  120. **   PR_FAILURE on failure.
  121. **
  122. *************************************************************/
  123. SSMStatus SSM_Dequeue(SSMCollection *list, PRIntn priority, void **item, PRBool doBlock);
  124. /************************************************************
  125. ** FUNCTION: SSM_Insert
  126. ** DESCRIPTION: Insert a new data item into (list) before (before).
  127. ** INPUTS:
  128. **   list
  129. **     The collection to be retrieved from.
  130. **   priority
  131. **     The priority of the item to be inserted.
  132. **   item
  133. **     The data item to insert.
  134. **   before
  135. **     The list member before which to insert.
  136. ** RETURNS:
  137. **   PR_SUCCESS on success.
  138. **   PR_FAILURE on failure.
  139. **
  140. *************************************************************/
  141. SSMStatus SSM_Insert(SSMCollection *list, PRIntn priority, 
  142.     void *item, void *before);
  143. /************************************************************
  144. ** FUNCTION: SSM_Remove
  145. ** DESCRIPTION: Remove (item) from (list).
  146. ** INPUTS:
  147. **   list
  148. **     The collection to be removed from.
  149. **   item
  150. **     The data item to be removed.
  151. ** RETURNS:
  152. **   PR_SUCCESS on success.
  153. **   PR_FAILURE on failure.
  154. **
  155. *************************************************************/
  156. SSMStatus SSM_Remove(SSMCollection *list, void *item);
  157. /************************************************************
  158. ** FUNCTION: SSM_Count
  159. ** DESCRIPTION: Returns the number of items in (list).
  160. ** INPUTS:
  161. **   list
  162. **     The collection to be counted.
  163. **   priority
  164. **     Only count items at or above (priority). Pass SSM_PRIORITY_ANY
  165. **     to count all items in the list.
  166. ** RETURNS:
  167. **   The number of items in the list.
  168. **
  169. *************************************************************/
  170. PRIntn SSM_Count(SSMCollection *list);
  171. PRIntn SSM_CountPriority(SSMCollection *list, PRIntn priority);
  172. /************************************************************
  173. ** FUNCTION: SSM_At
  174. ** DESCRIPTION: Get the (which)'th item in (list).
  175. ** INPUTS:
  176. **   list
  177. **     The collection to be indexed.
  178. **   which
  179. **     Index of item to retrieve.  Zero is first item.
  180. **
  181. *************************************************************/
  182. void *SSM_At(SSMCollection *list, PRIntn which);
  183. #endif /* __COLLECTN_H__ */