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 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199
|
/* SubMtxList.h */
#include "../SubMtx.h"
#include "../Lock.h"
/*--------------------------------------------------------------------*/
/*
--------------------------------------------------------------------
this object handles a list of lists of SubMtx objects
nlist -- # of lists
heads -- heads[ilist] contains a pointer
to the first SubMtx object in list ilist
counts -- when not-NULL, counts[ilist] contains the remaining number
of objects to be added to list ilist before it is complete
lock -- mutex object, can be NULL
flags -- when not NULL, a vector to specify when a list needs
to be locked before adding an object to it.
flags[ilist] = 'N' --> no need to lock
flags[ilist] = 'Y' --> must lock
nlocks -- number of times the list was locked
--------------------------------------------------------------------
*/
typedef struct _SubMtxList SubMtxList ;
struct _SubMtxList {
int nlist ;
SubMtx **heads ;
int *counts ;
Lock *lock ;
char *flags ;
int nlocks ;
} ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods found in basics.c ----------------------------------------
------------------------------------------------------------------------
*/
/*
-----------------------
simplest constructor
created -- 98may02, cca
-----------------------
*/
SubMtxList *
SubMtxList_new (
void
) ;
/*
-----------------------
set the default fields
created -- 98may02, cca
-----------------------
*/
void
SubMtxList_setDefaultFields (
SubMtxList *list
) ;
/*
--------------------------------------------------
clear the data fields, releasing allocated storage
created -- 98may02, cca
--------------------------------------------------
*/
void
SubMtxList_clearData (
SubMtxList *list
) ;
/*
------------------------------------------
destructor, free's the object and its data
created -- 98may02, cca
------------------------------------------
*/
void
SubMtxList_free (
SubMtxList *list
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods found in init.c ------------------------------------------
------------------------------------------------------------------------
*/
/*
------------------------------------------------------------------
purpose -- basic initializer
nlist -- number of lists to be held by this object
counts -- vector that contains number of items expected
for each list.
counts == NULL --> unknown number of items expected
counts != NULL --> known number of items expected
lockflag -- flag to specify lock status
lockflag = 0 --> mutex lock is not allocated or initialized
lockflag = 1 --> mutex lock is allocated and it can synchronize
only threads in this process.
lockflag = 2 --> mutex lock is allocated and it can synchronize
threads in this and other processes.
flags -- vector to specify whether to lock individual lists
flags == NULL --> none or all lists must be locked,
use lockflag to determine
flags[ilist] = 'N' --> no need to lock list ilist
flags[ilist] = 'Y' --> must lock list ilist
created -- 98may02, cca
------------------------------------------------------------------
*/
void
SubMtxList_init (
SubMtxList *list,
int nlist,
int counts[],
int lockflag,
char flags[]
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods found in IO.c --------------------------------------------
------------------------------------------------------------------------
*/
/*
----------------------------------------
purpose -- to write the object to a file
in human readable form
created -- 98may02, cca
----------------------------------------
*/
void
SubMtxList_writeForHumanEye (
SubMtxList *list,
FILE *fp
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods found in util.c ------------------------------------------
------------------------------------------------------------------------
*/
/*
-----------------------------------
return 1 if list ilist is not empty
return 0 if list ilist is empty
created -- 98may02, cca
-----------------------------------
*/
int
SubMtxList_isListNonempty (
SubMtxList *list,
int ilist
) ;
/*
---------------------------------------------------------
return 1 if the count for list ilist is zero
return 0 if the count for list ilist is greater than zero
created -- 98may02, cca
---------------------------------------------------------
*/
int
SubMtxList_isCountZero (
SubMtxList *list,
int ilist
) ;
/*
----------------------------
add and object to list ilist
created -- 98may02, cca
----------------------------
*/
void
SubMtxList_addObjectToList (
SubMtxList *list,
SubMtx *obj,
int ilist
) ;
/*
------------------------------------
return pointer to head of list ilist
and set head to NULL
created -- 98may02, cca
------------------------------------
*/
SubMtx *
SubMtxList_getList (
SubMtxList *list,
int ilist
) ;
/*--------------------------------------------------------------------*/
|