⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 classinf.c

📁 NASA 开发使用的一个专家系统
💻 C
📖 第 1 页 / 共 3 页
字号:
  globle VOID SlotCardinalityCommand(result)  DATA_OBJECT *result;  {   SlotInfoSupportFunction(result,"slot-cardinality",SlotCardinality);  }/********************************************************************  NAME         : ClassAbstractP  DESCRIPTION  : Determines if a class is abstract or not  INPUTS       : Generic pointer to class  RETURNS      : 1 if class is abstract, 0 otherwise  SIDE EFFECTS : None  NOTES        : None ********************************************************************/globle BOOLEAN ClassAbstractP(clsptr)  VOID *clsptr;  {   return(((DEFCLASS *) clsptr)->abstract);  }#if INSTANCE_PATTERN_MATCHING/********************************************************************  NAME         : ClassReactiveP  DESCRIPTION  : Determines if a class is reactive or not  INPUTS       : Generic pointer to class  RETURNS      : 1 if class is reactive, 0 otherwise  SIDE EFFECTS : None  NOTES        : None ********************************************************************/globle BOOLEAN ClassReactiveP(clsptr)  VOID *clsptr;  {   return(((DEFCLASS *) clsptr)->reactive);  }#endif/********************************************************************  NAME         : ClassSlots  DESCRIPTION  : Groups slot info for a class into a multifield value                   for dynamic perusal  INPUTS       : 1) Generic pointer to class                 2) Data object buffer to hold the slots of the class                 3) Include (1) or exclude (0) inherited slots  RETURNS      : Nothing useful  SIDE EFFECTS : Creates a multifield storing the names of                    the slots of the class  NOTES        : None ********************************************************************/globle VOID ClassSlots(clsptr,result,inhp)  VOID *clsptr;  DATA_OBJECT *result;  int inhp;  {   long size; /* 6.04 Bug Fix */   register DEFCLASS *cls;   register long i; /* 6.04 Bug Fix */      cls = (DEFCLASS *) clsptr;   size = inhp ? cls->instanceSlotCount : cls->slotCount;   result->type = MULTIFIELD;   result->begin = 0;   result->end = size - 1;   result->value = (VOID *) CreateMultifield(size);   if (size == 0)     return;   if (inhp)     {      for (i = 0 ; i < cls->instanceSlotCount ; i++)        {         SetMFType(result->value,i+1,SYMBOL);         SetMFValue(result->value,i+1,cls->instanceTemplate[i]->slotName->name);        }     }   else     {      for (i = 0 ; i < cls->slotCount ; i++)        {         SetMFType(result->value,i+1,SYMBOL);         SetMFValue(result->value,i+1,cls->slots[i].slotName->name);        }     }  }  /************************************************************************  NAME         : GetDefmessageHandlerList  DESCRIPTION  : Groups handler info for a class into a multifield value                   for dynamic perusal  INPUTS       : 1) Generic pointer to class (NULL to get handlers for                    all classes)                 2) Data object buffer to hold the handlers of the class                 3) Include (1) or exclude (0) inherited handlers  RETURNS      : Nothing useful  SIDE EFFECTS : Creates a multifield storing the names and types of                    the message-handlers of the class  NOTES        : None ************************************************************************/globle VOID GetDefmessageHandlerList(clsptr,result,inhp)  VOID *clsptr;  DATA_OBJECT *result;  int inhp;  {   DEFCLASS *cls,*svcls,*svnxt,*supcls;   register int j,classi,classiLimit;   long i,len,sublen;      if (clsptr == NULL)     {      inhp = 0;      cls = (DEFCLASS *) GetNextDefclass(NULL);      svnxt = (DEFCLASS *) GetNextDefclass((VOID *) cls);     }   else     {      cls = (DEFCLASS *) clsptr;      svnxt = (DEFCLASS *) GetNextDefclass((VOID *) cls);      SetNextDefclass((VOID *) cls,NULL);     }   for (svcls = cls , i = 0 ;         cls != NULL ;        cls = (DEFCLASS *) GetNextDefclass((VOID *) cls))     {      classiLimit = inhp ? cls->allSuperclasses.classCount : 1;      for (classi = 0 ; classi < classiLimit ; classi++)        i += cls->allSuperclasses.classArray[classi]->handlerCount;     }   len = i * 3;   result->type = MULTIFIELD;   result->begin = 0;   result->end = len - 1;   result->value = (VOID *) CreateMultifield(len);   for (cls = svcls , sublen = 0 ;        cls != NULL ;        cls = (DEFCLASS *) GetNextDefclass((VOID *) cls))     {      classiLimit = inhp ? cls->allSuperclasses.classCount : 1;      for (classi = 0 ; classi < classiLimit ; classi++)        {         supcls = cls->allSuperclasses.classArray[classi];         if (inhp == 0)           i = sublen + 1;         else           i = len - (supcls->handlerCount * 3) - sublen + 1;         for (j = 0 ; j < supcls->handlerCount ; j++)           {            SetMFType(result->value,i,SYMBOL);            SetMFValue(result->value,i++,GetDefclassNamePointer((VOID *) supcls));            SetMFType(result->value,i,SYMBOL);            SetMFValue(result->value,i++,supcls->handlers[j].name);            SetMFType(result->value,i,SYMBOL);            SetMFValue(result->value,i++,AddSymbol(hndquals[supcls->handlers[j].type]));           }         sublen += supcls->handlerCount * 3;        }     }   if (svcls != NULL)     SetNextDefclass((VOID *) svcls,(VOID *) svnxt);  }  /***************************************************************************  NAME         : ClassSuperclasses  DESCRIPTION  : Groups the names of superclasses into a multifield                   value for dynamic perusal  INPUTS       : 1) Generic pointer to class                 2) Data object buffer to hold the superclasses of the class                 3) Include (1) or exclude (0) indirect superclasses  RETURNS      : Nothing useful  SIDE EFFECTS : Creates a multifield storing the names of                    the superclasses of the class  NOTES        : None ***************************************************************************/globle VOID ClassSuperclasses(clsptr,result,inhp)  VOID *clsptr;  DATA_OBJECT *result;  int inhp;  {   PACKED_CLASS_LINKS *plinks;   int offset;   register unsigned i,j;      if (inhp)     {      plinks = &((DEFCLASS *) clsptr)->allSuperclasses;      offset = 1;     }   else     {      plinks = &((DEFCLASS *) clsptr)->directSuperclasses;      offset = 0;     }   result->type = MULTIFIELD;   result->begin = 0;   result->end = plinks->classCount - offset - 1;   result->value = (VOID *) CreateMultifield(result->end + 1);   if (result->end == -1)     return;   for (i = offset , j = 1 ; i < plinks->classCount ; i++ , j++)     {      SetMFType(result->value,j,SYMBOL);      SetMFValue(result->value,j,GetDefclassNamePointer((VOID *) plinks->classArray[i]));     }  }  /**************************************************************************  NAME         : ClassSubclasses  DESCRIPTION  : Groups the names of subclasses for a class into a                   multifield value for dynamic perusal  INPUTS       : 1) Generic pointer to class                 2) Data object buffer to hold the sublclasses of the class                 3) Include (1) or exclude (0) indirect subclasses  RETURNS      : Nothing useful  SIDE EFFECTS : Creates a multifield storing the names                    the subclasses of the class  NOTES        : None **************************************************************************/globle VOID ClassSubclasses(clsptr,result,inhp)  VOID *clsptr;  DATA_OBJECT *result;  int inhp;  {   register int i,id;      if ((id = GetTraversalID()) == -1)     return;   i = CountSubclasses((DEFCLASS *) clsptr,inhp,id);   ReleaseTraversalID();   result->type = MULTIFIELD;   result->begin = 0;   result->end = i - 1;   result->value = (VOID *) CreateMultifield(i);   if (i == 0)     return;   if ((id = GetTraversalID()) == -1)     return;   StoreSubclasses(result->value,1,(DEFCLASS *) clsptr,inhp,id);   ReleaseTraversalID();  }/**************************************************************************  NAME         : Slot...  Slot information access functions  DESCRIPTION  : Groups the sources/facets/types/allowed-values/range or                   cardinality  of a slot for a class into a multifield                   value for dynamic perusal  INPUTS       : 1) Generic pointer to class                 2) Name of the slot                 3) Data object buffer to hold the attributes of the class  RETURNS      : Nothing useful  SIDE EFFECTS : Creates a multifield storing the attributes for the slot                   of the class  NOTES        : None **************************************************************************/globle VOID SlotFacets(clsptr,sname,result)  VOID *clsptr;  char *sname;  DATA_OBJECT *result;  {   register int i;   register SLOT_DESC *sp;   if ((sp = SlotInfoSlot(result,(DEFCLASS *) clsptr,sname,"slot-facets")) == NULL)     return;#if INSTANCE_PATTERN_MATCHING   result->end = 9;   result->value = (VOID *) CreateMultifield(10L);   for (i = 1 ; i <= 10 ; i++)     SetMFType(result->value,i,SYMBOL);#else   result->end = 8;   result->value = (VOID *) CreateMultifield(9L);   for (i = 1 ; i <= 9 ; i++)     SetMFType(result->value,i,SYMBOL);#endif   SetMFValue(result->value,1,AddSymbol(sp->multiple ? "MLT" : "SGL"));   if (sp->noDefault)     SetMFValue(result->value,2,AddSymbol("NIL"));   else     SetMFValue(result->value,2,AddSymbol(sp->dynamicDefault ? "DYN" : "STC"));   SetMFValue(result->value,3,AddSymbol(sp->noInherit ? "NIL" : "INH"));   if (sp->initializeOnly)     SetMFValue(result->value,4,AddSymbol("INT"));   else if (sp->noWrite)     SetMFValue(result->value,4,AddSymbol("R"));   else     SetMFValue(result->value,4,AddSymbol("RW"));   SetMFValue(result->value,5,AddSymbol(sp->shared ? "SHR" : "LCL"));#if INSTANCE_PATTERN_MATCHING   SetMFValue(result->value,6,AddSymbol(sp->reactive ? "RCT" : "NIL"));   SetMFValue(result->value,7,AddSymbol(sp->composite ? "CMP" : "EXC"));   SetMFValue(result->value,8,AddSymbol(sp->publicVisibility ? "PUB" : "PRV"));   SetMFValue(result->value,9,AddSymbol(GetCreateAccessorString((VOID *) sp)));   SetMFValue(result->value,10,sp->noWrite ? AddSymbol("NIL") : (VOID *) sp->overrideMessage);#else   SetMFValue(result->value,6,AddSymbol(sp->composite ? "CMP" : "EXC"));   SetMFValue(result->value,7,AddSymbol(sp->publicVisibility ? "PUB" : "PRV"));   SetMFValue(result->value,8,AddSymbol(GetCreateAccessorString((VOID *) sp)));   SetMFValue(result->value,9,sp->noWrite ? AddSymbol("NIL") : (VOID *) sp->overrideMessage);#endif  }globle VOID SlotSources(clsptr,sname,result)  VOID *clsptr;  char *sname;  DATA_OBJECT *result;  {   register int i,classi;   register SLOT_DESC *sp,*csp;   CLASS_LINK *ctop,*ctmp;   DEFCLASS *cls;      if ((sp = SlotInfoSlot(result,(DEFCLASS *) clsptr,sname,"slot-sources")) == NULL)     return;   i = 1;   ctop = get_struct(classLink);   ctop->cls = sp->cls;   ctop->nxt = NULL;   if (sp->composite)     {      for (classi = 1 ; classi < sp->cls->allSuperclasses.classCount ; classi++)        {         cls = sp->cls->allSuperclasses.classArray[classi];         csp = FindClassSlot(cls,sp->slotName->name);         if ((csp != NULL) ? (csp->noInherit == 0) : CLIPS_FALSE)           {            ctmp = get_struct(classLink);            ctmp->cls = cls;            ctmp->nxt = ctop;            ctop = ctmp;            i++;            if (csp->composite == 0)              break;           }        }     }   result->end = i - 1;   result->value = (VOID *) CreateMultifield(i);   for (ctmp = ctop , i = 1 ; ctmp != NULL ; ctmp = ctmp->nxt , i++)     {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -