globle void *FindHashedPatternNode( void *theEnv, EXEC_STATUS, void *parent, unsigned short keyType, void *keyValue) { unsigned long hashValue; struct patternNodeHashEntry *hptr; hashValue = GetAtomicHashValue(keyType,keyValue,1) + HashExternalAddress(parent,0); /* TBD mult * 30 */ hashValue = (hashValue % PatternData(theEnv,execStatus)->PatternHashTableSize); for (hptr = PatternData(theEnv,execStatus)->PatternHashTable[hashValue]; hptr != NULL; hptr = hptr->next) { if ((hptr->parent == parent) && (keyType == hptr->type) && (keyValue == hptr->value)) { return(hptr->child); } } return(NULL); }
globle void AddHashedPatternNode( void *theEnv, EXEC_STATUS, void *parent, void *child, unsigned short keyType, void *keyValue) { unsigned long hashValue; struct patternNodeHashEntry *newhash, *temp; hashValue = GetAtomicHashValue(keyType,keyValue,1) + HashExternalAddress(parent,0); /* TBD mult * 30 */ newhash = get_struct(theEnv,execStatus,patternNodeHashEntry); newhash->parent = parent; newhash->child = child; newhash->type = keyType; newhash->value = keyValue; hashValue = (hashValue % PatternData(theEnv,execStatus)->PatternHashTableSize); temp = PatternData(theEnv,execStatus)->PatternHashTable[hashValue]; PatternData(theEnv,execStatus)->PatternHashTable[hashValue] = newhash; newhash->next = temp; }
globle intBool RemoveHashedPatternNode( void *theEnv, EXEC_STATUS, void *parent, void *child, unsigned short keyType, void *keyValue) { unsigned long hashValue; struct patternNodeHashEntry *hptr, *prev; hashValue = GetAtomicHashValue(keyType,keyValue,1) + HashExternalAddress(parent,0); /* TBD mult * 30 */ hashValue = (hashValue % PatternData(theEnv,execStatus)->PatternHashTableSize); for (hptr = PatternData(theEnv,execStatus)->PatternHashTable[hashValue], prev = NULL; hptr != NULL; hptr = hptr->next) { if (hptr->child == child) { if (prev == NULL) { PatternData(theEnv,execStatus)->PatternHashTable[hashValue] = hptr->next; rtn_struct(theEnv,execStatus,patternNodeHashEntry,hptr); return(1); } else { prev->next = hptr->next; rtn_struct(theEnv,execStatus,patternNodeHashEntry,hptr); return(1); } } prev = hptr; } return(0); }
bool RemoveHashedPatternNode( Environment *theEnv, void *parent, void *child, unsigned short keyType, void *keyValue) { size_t hashValue; struct patternNodeHashEntry *hptr, *prev; hashValue = GetAtomicHashValue(keyType,keyValue,1) + HashExternalAddress(parent,0); /* TBD mult * 30 */ hashValue = (hashValue % PatternData(theEnv)->PatternHashTableSize); for (hptr = PatternData(theEnv)->PatternHashTable[hashValue], prev = NULL; hptr != NULL; hptr = hptr->next) { if (hptr->child == child) { if (prev == NULL) { PatternData(theEnv)->PatternHashTable[hashValue] = hptr->next; rtn_struct(theEnv,patternNodeHashEntry,hptr); return true; } else { prev->next = hptr->next; rtn_struct(theEnv,patternNodeHashEntry,hptr); return true; } } prev = hptr; } return false; }
void *FindHashedPatternNode( Environment *theEnv, void *parent, unsigned short keyType, void *keyValue) { size_t hashValue; struct patternNodeHashEntry *hptr; hashValue = GetAtomicHashValue(keyType,keyValue,1) + HashExternalAddress(parent,0); /* TBD mult * 30 */ hashValue = (hashValue % PatternData(theEnv)->PatternHashTableSize); for (hptr = PatternData(theEnv)->PatternHashTable[hashValue]; hptr != NULL; hptr = hptr->next) { if ((hptr->parent == parent) && (keyType == hptr->type) && (keyValue == hptr->value)) { return(hptr->child); } } return NULL; }