예제 #1
0
파일: pattern.c 프로젝트: atrniv/CLIPS
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);
  }
예제 #2
0
파일: pattern.c 프로젝트: atrniv/CLIPS
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;
  }
예제 #3
0
파일: pattern.c 프로젝트: atrniv/CLIPS
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);
  }
예제 #4
0
파일: pattern.c 프로젝트: DrItanium/maya
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;
  }
예제 #5
0
파일: pattern.c 프로젝트: DrItanium/maya
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;
  }