added lookup and remove capability

This commit is contained in:
Jeff Hill
1999-12-14 21:12:42 +00:00
parent e8d89c45b3
commit 6132a8762d
2 changed files with 46 additions and 21 deletions

View File

@@ -94,7 +94,6 @@ LOCAL bucketSET BSET[] = {
LOCAL int bucketAddItem(BUCKET *prb, bucketSET *pBSET,
const void *pId, const void *pApp);
LOCAL int bucketRemoveItem (BUCKET *prb, bucketSET *pBSET, const void *pId);
LOCAL void *bucketLookupItem(BUCKET *pb, bucketSET *pBSET, const void *pId);
@@ -464,30 +463,15 @@ LOCAL int bucketAddItem(BUCKET *prb, bucketSET *pBSET, const void *pId, const vo
return S_bucket_success;
}
/*
* bucketRemoveItem()
* bucketLookupAndRemoveItem ()
*/
epicsShareFunc int epicsShareAPI
bucketRemoveItemUnsignedId (BUCKET *prb, const unsigned *pId)
{
return bucketRemoveItem(prb, &BSET[bidtUnsigned], pId);
}
epicsShareFunc int epicsShareAPI
bucketRemoveItemPointerId (BUCKET *prb, void * const *pId)
{
return bucketRemoveItem(prb, &BSET[bidtPointer], pId);
}
epicsShareFunc int epicsShareAPI
bucketRemoveItemStringId (BUCKET *prb, const char *pId)
{
return bucketRemoveItem(prb, &BSET[bidtString], pId);
}
LOCAL int bucketRemoveItem (BUCKET *prb, bucketSET *pBSET, const void *pId)
LOCAL void *bucketLookupAndRemoveItem (BUCKET *prb, bucketSET *pBSET, const void *pId)
{
BUCKETID hashid;
ITEM **ppi;
ITEM *pi;
void *pApp;
/*
* create the hash index
@@ -498,20 +482,53 @@ LOCAL int bucketRemoveItem (BUCKET *prb, bucketSET *pBSET, const void *pId)
ppi = &prb->pTable[hashid];
ppi = (*pBSET->pCompare) (ppi, pId);
if(!ppi){
return S_bucket_uknId;
return NULL;
}
prb->nInUse--;
pi = *ppi;
*ppi = pi->pItem;
pApp = (void *) pi->pApp;
/*
* stuff it on the free list
*/
freeListFree(prb->freeListPVT, pi);
return S_bucket_success;
return pApp;
}
epicsShareFunc void * epicsShareAPI bucketLookupAndRemoveItemUnsignedId (BUCKET *prb, READONLY unsigned *pId)
{
return bucketLookupAndRemoveItem(prb, &BSET[bidtUnsigned], pId);
}
epicsShareFunc void * epicsShareAPI bucketLookupAndRemoveItemPointerId (BUCKET *prb, void * READONLY *pId)
{
return bucketLookupAndRemoveItem(prb, &BSET[bidtPointer], pId);
}
epicsShareFunc void * epicsShareAPI bucketLookupAndRemoveItemStringId (BUCKET *prb, READONLY char *pId)
{
return bucketLookupAndRemoveItem(prb, &BSET[bidtString], pId);
}
/*
* bucketRemoveItem()
*/
epicsShareFunc int epicsShareAPI
bucketRemoveItemUnsignedId (BUCKET *prb, const unsigned *pId)
{
return bucketLookupAndRemoveItem(prb, &BSET[bidtUnsigned], pId)?S_bucket_success:S_bucket_uknId;
}
epicsShareFunc int epicsShareAPI
bucketRemoveItemPointerId (BUCKET *prb, void * const *pId)
{
return bucketLookupAndRemoveItem(prb, &BSET[bidtPointer], pId)?S_bucket_success:S_bucket_uknId;
}
epicsShareFunc int epicsShareAPI
bucketRemoveItemStringId (BUCKET *prb, const char *pId)
{
return bucketLookupAndRemoveItem(prb, &BSET[bidtString], pId)?S_bucket_success:S_bucket_uknId;
}
/*

View File

@@ -33,6 +33,9 @@
* .02 121693 joh added bucketFree()
* .03 052395 joh use std EPICS status
* $Log$
* Revision 1.7 1998/02/27 01:34:08 jhill
* cleaned up the DLL symbol export
*
* Revision 1.6 1998/02/20 21:45:10 evans
* Made a large number of changes to epicsShareThings in libCom routines
* to get imports and exports straight on WIN32. Not everything is fixed
@@ -108,6 +111,11 @@ epicsShareFunc void * epicsShareAPI bucketLookupItemUnsignedId (BUCKET *prb, REA
epicsShareFunc void * epicsShareAPI bucketLookupItemPointerId (BUCKET *prb, void * READONLY *pId);
epicsShareFunc void * epicsShareAPI bucketLookupItemStringId (BUCKET *prb, READONLY char *pId);
epicsShareFunc void * epicsShareAPI bucketLookupAndRemoveItemUnsignedId (BUCKET *prb, READONLY unsigned *pId);
epicsShareFunc void * epicsShareAPI bucketLookupAndRemoveItemPointerId (BUCKET *prb, void * READONLY *pId);
epicsShareFunc void * epicsShareAPI bucketLookupAndRemoveItemStringId (BUCKET *prb, READONLY char *pId);
/*
* Status returned by bucketLib functions
*/