- introduced FindHdbCallbackData
This commit is contained in:
38
hipadaba.c
38
hipadaba.c
@ -81,15 +81,16 @@ void RemoveHdbNodeFromParent(pHdb node, void *callData){
|
||||
if(parent != NULL){
|
||||
if(parent->child == node){
|
||||
parent->child = node->next;
|
||||
return;
|
||||
} else {
|
||||
current = parent->child;
|
||||
while(current->next != node){
|
||||
current = current->next;
|
||||
}
|
||||
current->next = current->next->next;
|
||||
}
|
||||
current = parent->child;
|
||||
while(current->next != node){
|
||||
current = current->next;
|
||||
}
|
||||
current->next = current->next->next;
|
||||
InvokeCallbackChain(parent->treeChangeCallbacks,
|
||||
parent,callData,parent->value);
|
||||
parent,callData,parent->value);
|
||||
node->mama = NULL;
|
||||
}
|
||||
}
|
||||
/*----------------------------------------------------------------------*/
|
||||
@ -518,6 +519,7 @@ int compareHdbValue(hdbValue v1, hdbValue v2){
|
||||
int cloneHdbValue(hdbValue *source, hdbValue *clone){
|
||||
|
||||
memset(clone,0,sizeof(hdbValue));
|
||||
clone->v.text = NULL; /* this sets all pointers in the union to NULL */
|
||||
clone->dataType = source->dataType;
|
||||
return copyHdbValue(source, clone);
|
||||
}
|
||||
@ -875,6 +877,25 @@ void InternalRemoveHipadabaCallback(pHdb root, void *internalID){
|
||||
current = current->next;
|
||||
}
|
||||
}
|
||||
/*----------------------------------------------------------------------------*/
|
||||
void *FindHdbCallbackData(pHdb node, int type, hdbCallbackFunction func
|
||||
, void *internalID) {
|
||||
pHdbCallback cb;
|
||||
|
||||
switch (type) {
|
||||
case HCBSET: cb = node->writeCallbacks; break;
|
||||
case HCBUPDATE: cb = node->updateCallbacks; break;
|
||||
case HCBREAD: cb = node->readCallbacks; break;
|
||||
case HCBTREE: cb = node->treeChangeCallbacks; break;
|
||||
}
|
||||
while (cb != NULL) {
|
||||
if (cb->internalID == internalID && cb->userCallback == func) {
|
||||
return cb->userData;
|
||||
}
|
||||
cb = cb->next;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
/*=================== parameter interface ====================================*/
|
||||
static int canCopy(hdbValue *source, hdbValue *target){
|
||||
if(target->dataType == HIPINTVARAR) {
|
||||
@ -1001,11 +1022,12 @@ int NotifyHipadabaPar(pHdb node,void *callData){
|
||||
int GetHipadabaPar(pHdb node, hdbValue *v, void *callData){
|
||||
int status;
|
||||
|
||||
v->dataType = node->value.dataType;
|
||||
v->v.text = NULL; /* this sets all pointers in the union to NULL */
|
||||
status = InvokeCallbackChain(node->readCallbacks, node, callData, *v);
|
||||
if(status != 1 ){
|
||||
return status;
|
||||
}
|
||||
v->dataType = node->value.dataType;
|
||||
copyHdbValue(&node->value,v);
|
||||
return 1;
|
||||
}
|
||||
|
@ -284,6 +284,15 @@ void RemoveHipadabaCallback(pHdb root, int id);
|
||||
* @param internalID The internal ID callbacks have to match in order to be removed.
|
||||
*/
|
||||
void InternalRemoveHipadabaCallback(pHdb root, void *internalID);
|
||||
/**
|
||||
* find the callback data
|
||||
* @param node the node from where callbacks have to be searched
|
||||
* @param type the type of the callback to be searched
|
||||
* @param func the function registered with the searched callback
|
||||
* @return the found callback user data or NULL on failure
|
||||
*/
|
||||
void *FindHdbCallbackData(pHdb node, int type, hdbCallbackFunction func
|
||||
, void *internalID);
|
||||
/**
|
||||
* invoke a callback chain.
|
||||
* @param root The callback chain to invoke
|
||||
|
Reference in New Issue
Block a user