/******************************************************************************* Copyright by Telesoft Europe AB 1990, 1991. Copyright by Telelogic Malmoe AB 1991, 1992, 1993, 1994. Copyright by Telelogic AB 1994 - 1998. This Program is owned by Telelogic and is protected by national copyright laws and international copyright treaties. Telelogic grants you the right to use this Program on one computer or in one local computer network at any one time. Under this License you may only modify the source code for the purpose of adapting it to your environment. You must reproduce and include any copyright and trademark notices on all copies of the source code. You may not use, copy, merge, modify or transfer the Program except as provided in this License. Telelogic does not warrant that the Program will meet your requirements or that the operation of the Program will be uninterrupted and error free. You are solely responsible that the selection of the Program and the modification of the source code will achieve your intended results and that the results are actually obtained. *******************************************************************************/ newtype Queue /*#NAME 'Queue'*/ literals Null /*#NAME 'QueueNull'*/ /*#OP(S)*/ , NewQueue /*#NAME 'NewQueue'*/ ; operators Cardinal /*#NAME 'Cardinal'*/ : Queue -> Integer; DisposeQueue /*#NAME 'DisposeQueue'*/ : Queue -> Queue; Empty /*#NAME 'Empty'*/ : Queue -> Boolean; FirstInQueue /*#NAME 'FirstInQueue'*/ : Queue -> ObjectInstance; Follow /*#NAME 'Follow'*/ : Queue, ObjectInstance, ObjectInstance -> Queue; IntoAsFirst /*#NAME 'IntoAsFirst'*/ : Queue, ObjectInstance -> Queue; IntoAsLast /*#NAME 'IntoAsLast'*/ : Queue, ObjectInstance -> Queue; LastInQueue /*#NAME 'LastInQueue'*/ : Queue -> ObjectInstance; Member /*#NAME 'Member'*/ : Queue, ObjectInstance -> Boolean; Precede /*#NAME 'Precede'*/ : Queue, ObjectInstance, ObjectInstance -> Queue; Predecessor /*#NAME 'Predecessor'*/ : ObjectInstance -> ObjectInstance; Remove /*#NAME 'Remove'*/ : ObjectInstance -> ObjectInstance; Successor /*#NAME 'Successor'*/ : ObjectInstance -> ObjectInstance; default Null; /*#ADT(TA(S)E(S)R(S)W(H)D(H) HP) #TYPE #ifdef XVALIDATOR ERROR__data_type_cannot_be_used_by_SDT_Validator #endif typedef void * Queue; #define yDef_Queue(yVar) *(yVar) = (Queue)0 #define QueueNull() (Queue)0 #define xListTraceLevel xtEight #HEADING #ifdef XREADANDWRITEF extern char * yWri_Queue XPP((void * Value)); #endif extern Queue NewQueue XPP((void)); extern SDL_Integer Cardinal XPP((Queue Q)); extern Queue DisposeQueue XPP((Queue Q)); extern SDL_Boolean Empty XPP((Queue Q)); extern ObjectInstance FirstInQueue XPP((Queue Q)); extern Queue Follow XPP((Queue Q, ObjectInstance NewObject, ObjectInstance Object)); extern Queue IntoAsFirst XPP((Queue Q, ObjectInstance Object)); extern Queue IntoAsLast XPP((Queue Q, ObjectInstance Object)); extern ObjectInstance LastInQueue XPP((Queue Q)); extern SDL_Boolean Member XPP((Queue Q, ObjectInstance Object)); extern Queue Precede XPP((Queue Q, ObjectInstance NewObject, ObjectInstance Object)); extern ObjectInstance Predecessor XPP((ObjectInstance Object)); extern ObjectInstance Remove XPP((ObjectInstance Object)); extern ObjectInstance Successor XPP((ObjectInstance Object)); #BODY #ifdef XREADANDWRITEF #ifndef XNOPROTO char * yWri_Queue (void * Value) #else char * yWri_Queue (Value) void * Value; #endif { int Card; Queue Object; Queue Q; int IntVar; char strVar[50]; xxToken Token; static char CTemp[100]; Q = *(void * *)Value; if ( Q == (Queue)0 ) return "Null"; Card = 0; for (Object = ((ObjectDescr *)(Q))->#(SysVar).#(Suc); Object != Q; Object = ((ObjectDescr *)(Object))->#(SysVar).#(Suc)) Card++; if ( Card == 0 ) return "Empty Queue"; if (*xInputPos == '\0') { sprintf(CTemp, "Queue contains %d objects", Card); return CTemp; } Token = xScanToken(strVar); if (Token == xxEoln) { sprintf(CTemp, "Queue contains %d objects", Card); xUngetToken(Token, strVar); return CTemp; } else if (Token == xxId && sscanf(strVar, "%d", &IntVar)) { if ( IntVar<=0 || IntVar>Card ) { return "No object at that position\n"; } for (Object = Q; IntVar-- > 0; Object = ((ObjectDescr *)(Object))->#(SysVar).#(Suc)) ; return yWri_ObjectInstance (&Object); } else { return "Illegal index value\n "; } } #endif #ifndef XNOPROTO Queue NewQueue (void) #else Queue NewQueue () #endif { Queue Q; #ifdef XTRACE if ( xShouldBeTraced(xListTraceLevel, (xPrsNode)0) ) xPrintString(" NewQueue\n"); #endif if ( xAvailObjectInstance != (ObjectInstance)0 ) { Q = (void *)xAvailObjectInstance; xAvailObjectInstance = (ObjectInstance)((ObjectInstance)(Q))->#(SysVar).#(Suc); } else { Q = (Queue)xAlloc((xptrint)sizeof(ObjectDescr)); } ((ObjectDescr *)(Q))->#(SysVar).#(Pre) = (Queue)Q; ((ObjectDescr *)(Q))->#(SysVar).#(Suc) = (Queue)Q; ((ObjectDescr *)(Q))->#(SysVar).#(TypeOfObject) = xQHead; return Q; } #ifndef XNOPROTO SDL_Integer Cardinal (Queue Q) #else SDL_Integer Cardinal (Q) Queue Q; #endif { int Count; Queue Object; #ifdef XTRACE if ( xShouldBeTraced(xListTraceLevel, (xPrsNode)0) ) xPrintString(" Cardinal\n"); #endif #ifdef XOPERRORF if ( Q==(Queue)0 ) { xSDLOpError("Cardinal in sort Queue", "Queue parameter is Null"); return 0; } if ( ((ObjectDescr *)(Q))->#(SysVar).#(TypeOfObject)!=xQHead ) { xSDLOpError("Cardinal in sort Queue", "Queue parameter is not a queue head"); return 0; } #endif Count = 0; for ( Object = ((ObjectDescr *)(Q))->#(SysVar).#(Suc); Object != Q; Object = ((ObjectDescr *)(Object))->#(SysVar).#(Suc) ) Count++; return Count; } #ifndef XNOPROTO Queue DisposeQueue (Queue Q) #else Queue DisposeQueue (Q) Queue Q; #endif { Queue Object; #ifdef XTRACE if ( xShouldBeTraced(xListTraceLevel, (xPrsNode)0) ) xPrintString(" DisposeQueue\n"); #endif #ifdef XOPERRORF if ( Q==(Queue)0 ) { xSDLOpError("DisposeQueue in sort Queue", "Queue parameter is Null"); return (Queue)0; } if ( ((ObjectDescr *)(Q))->#(SysVar).#(TypeOfObject)!=xQHead ) { xSDLOpError("DisposeQueue in sort Queue", "Queue parameter is not a queue head"); return (Queue)0; } #endif for ( Object = ((ObjectDescr *)(Q))->#(SysVar).#(Suc); Object != Q; Object = ((ObjectDescr *)(Q))->#(SysVar).#(Suc) ) DisposeObject((ObjectInstance)Object); DisposeObject((ObjectInstance)Q); return (Queue)0; } #ifndef XNOPROTO SDL_Boolean Empty (Queue Q) #else SDL_Boolean Empty (Q) Queue Q; #endif { #ifdef XTRACE if ( xShouldBeTraced(xListTraceLevel, (xPrsNode)0) ) xPrintString(" Empty\n"); #endif #ifdef XOPERRORF if ( Q==(Queue)0 ) { xSDLOpError("Empty in sort Queue", "Queue parameter is Null"); return SDL_True; } if ( ((ObjectDescr *)(Q))->#(SysVar).#(TypeOfObject)!=xQHead ) { xSDLOpError("Empty in sort Queue", "Queue parameter is not a queue head"); return SDL_True; } #endif return ( (SDL_Boolean)(((ObjectDescr *)(Q))->#(SysVar).#(Suc) == Q) ); } #ifndef XNOPROTO ObjectInstance FirstInQueue (Queue Q) #else ObjectInstance FirstInQueue (Q) Queue Q; #endif { #ifdef XTRACE if ( xShouldBeTraced(xListTraceLevel, (xPrsNode)0) ) xPrintString(" FirstInQueue\n"); #endif #ifdef XOPERRORF if ( Q==(Queue)0 ) { xSDLOpError("FirstInQueue in sort Queue", "Queue parameter is Null"); return (ObjectInstance)0; } if ( ((ObjectDescr *)(Q))->#(SysVar).#(TypeOfObject)!=xQHead ) { xSDLOpError("FirstInQueue in sort Queue", "Queue parameter is not a queue head"); return (ObjectInstance)0; } #endif if ( ((ObjectDescr *)(Q))->#(SysVar).#(Suc) == Q ) return (ObjectInstance)0; return (ObjectInstance)((ObjectDescr *)(Q))->#(SysVar).#(Suc); } #ifndef XNOPROTO Queue Follow (Queue Q, ObjectInstance NewObject, ObjectInstance Object) #else Queue Follow (Q, NewObject, Object) Queue Q; ObjectInstance NewObject; ObjectInstance Object; #endif { #ifdef XTRACE if ( xShouldBeTraced(xListTraceLevel, (xPrsNode)0) ) xPrintString(" Follow\n"); #endif #ifdef XOPERRORF if ( Q==(Queue)0 ) { xSDLOpError("Follow in sort Queue", "Queue parameter is Null"); return (Queue)0; } if ( ((ObjectDescr *)(Q))->#(SysVar).#(TypeOfObject)!=xQHead ) { xSDLOpError("Follow in sort Queue", "Queue parameter is not a queue head"); return (Queue)0; } if ( NewObject==(ObjectInstance)0 ) { xSDLOpError("Follow in sort Queue", "New ObjectInstance parameter is Null"); return Q; } if ( NewObject->#(SysVar).#(TypeOfObject)!=xOI ) { xSDLOpError("Follow in sort Queue", "New ObjectInstance parameter is not an object instance"); return Q; } if ( NewObject->#(SysVar).#(Pre)!=(Queue)0 ) { xSDLOpError("Follow in sort Queue", "New ObjectInstance given as parameter is already in queue"); return Q; } if ( Object==(ObjectInstance)0 ) { xSDLOpError("Follow in sort Queue", "ObjectInstance parameter is Null"); return Q; } if ( Object->#(SysVar).#(TypeOfObject)!=xOI ) { xSDLOpError("Follow in sort Queue", "ObjectInstance parameter is not an object instance"); return Q; } if ( Object->#(SysVar).#(Pre)==(Queue)0 ) { xSDLOpError("Follow in sort Queue", "ObjectInstance given as parameter is not in queue"); return Q; } if ( ! Member(Q, Object) ) { xSDLOpError("Follow in sort Queue", "ObjectInstance parameter not member of Q"); return Q; } #endif NewObject->#(SysVar).#(Pre) = (Queue)Object; NewObject->#(SysVar).#(Suc) = Object->#(SysVar).#(Suc); ((ObjectDescr *)(Object->#(SysVar).#(Suc)))->#(SysVar).#(Pre) = (Queue)NewObject; Object->#(SysVar).#(Suc) = (Queue)NewObject; return Q; } #ifndef XNOPROTO Queue IntoAsFirst (Queue Q, ObjectInstance Object) #else Queue IntoAsFirst (Q, Object) Queue Q; ObjectInstance Object; #endif { #ifdef XTRACE if ( xShouldBeTraced(xListTraceLevel, (xPrsNode)0) ) xPrintString(" IntoAsFirst\n"); #endif #ifdef XOPERRORF if ( Q==(Queue)0 ) { xSDLOpError("IntoAsFirst in sort Queue", "Queue parameter is Null"); return (Queue)0; } if ( ((ObjectDescr *)(Q))->#(SysVar).#(TypeOfObject)!=xQHead ) { xSDLOpError("IntoAsFirst in sort Queue", "Queue parameter is not a queue head"); return (Queue)0; } if ( Object==(ObjectInstance)0 ) { xSDLOpError("IntoAsFirst in sort Queue", "ObjectInstance parameter is Null"); return Q; } if ( Object->#(SysVar).#(TypeOfObject)!=xOI ) { xSDLOpError("IntoAsFirst in sort Queue", "ObjectInstance parameter is not an object instance"); return Q; } if ( Object->#(SysVar).#(Pre)!=(Queue)0 ) { xSDLOpError("IntoAsFirst in sort Queue", "ObjectInstance given as parameter is already in queue"); return Q; } #endif Object->#(SysVar).#(Pre) = Q; Object->#(SysVar).#(Suc) = ((ObjectDescr *)(Q))->#(SysVar).#(Suc); ((ObjectDescr *)(((ObjectDescr *)(Q))->#(SysVar).#(Suc)))->#(SysVar).#(Pre) = (Queue)Object; ((ObjectDescr *)(Q))->#(SysVar).#(Suc) = (Queue)Object; return Q; } #ifndef XNOPROTO Queue IntoAsLast (Queue Q, ObjectInstance Object) #else Queue IntoAsLast (Q, Object) Queue Q; ObjectInstance Object; #endif { #ifdef XTRACE if ( xShouldBeTraced(xListTraceLevel, (xPrsNode)0) ) xPrintString(" IntoAsLast\n"); #endif #ifdef XOPERRORF if ( Q==(Queue)0 ) { xSDLOpError("IntoAsLast in sort Queue", "Queue parameter is Null"); return (Queue)0; } if ( ((ObjectDescr *)(Q))->#(SysVar).#(TypeOfObject)!=xQHead ) { xSDLOpError("IntoAsLast in sort Queue", "Queue parameter is not a queue head"); return (Queue)0; } if ( Object==(ObjectInstance)0 ) { xSDLOpError("IntoAsLast in sort Queue", "ObjectInstance parameter is Null"); return Q; } if ( Object->#(SysVar).#(TypeOfObject)!=xOI ) { xSDLOpError("IntoAsLast in sort Queue", "ObjectInstance parameter is not an object instance"); return Q; } if ( Object->#(SysVar).#(Pre)!=(Queue)0 ) { xSDLOpError("IntoAsLast in sort Queue", "ObjectInstance given as parameter is already in queue"); return Q; } #endif Object->#(SysVar).#(Suc) = Q; Object->#(SysVar).#(Pre) = ((ObjectDescr *)(Q))->#(SysVar).#(Pre); ((ObjectDescr *)(((ObjectDescr *)(Q))->#(SysVar).#(Pre)))->#(SysVar).#(Suc) = (Queue)Object; ((ObjectDescr *)(Q))->#(SysVar).#(Pre) = (Queue)Object; return Q; } #ifndef XNOPROTO ObjectInstance LastInQueue (Queue Q) #else ObjectInstance LastInQueue (Q) Queue Q; #endif { #ifdef XTRACE if ( xShouldBeTraced(xListTraceLevel, (xPrsNode)0) ) xPrintString(" LastInQueue\n"); #endif #ifdef XOPERRORF if ( Q==(Queue)0 ) { xSDLOpError("LastInQueue in sort Queue", "Queue parameter is Null"); return (ObjectInstance)0; } if ( ((ObjectDescr *)(Q))->#(SysVar).#(TypeOfObject)!=xQHead ) { xSDLOpError("LastInQueue in sort Queue", "Queue parameter is not a queue head"); return (ObjectInstance)0; } #endif if ( ((ObjectDescr *)(Q))->#(SysVar).#(Suc) == Q ) return (ObjectInstance)0; return (ObjectInstance)((ObjectDescr *)(Q))->#(SysVar).#(Pre); } #ifndef XNOPROTO SDL_Boolean Member (Queue Q, ObjectInstance Object) #else SDL_Boolean Member (Q, Object) Queue Q; ObjectInstance Object; #endif { Queue Temp; #ifdef XTRACE if ( xShouldBeTraced(xListTraceLevel, (xPrsNode)0) ) xPrintString(" Member\n"); #endif #ifdef XOPERRORF if ( Q==(Queue)0 ) { xSDLOpError("Member in sort Queue", "Queue parameter is Null"); return SDL_False; } if ( ((ObjectDescr *)(Q))->#(SysVar).#(TypeOfObject)!=xQHead ) { xSDLOpError("Member in sort Queue", "Queue parameter is not a queue head"); return SDL_False; } if ( Object==(ObjectInstance)0 ) { xSDLOpError("Member in sort Queue", "ObjectInstance parameter is Null"); return SDL_False; } if ( Object->#(SysVar).#(TypeOfObject)!=xOI ) { xSDLOpError("Member in sort Queue", "ObjectInstance parameter is not an object instance"); return SDL_False; } #endif for ( Temp = ((ObjectDescr *)(Q))->#(SysVar).#(Suc); Temp != Q; Temp = ((ObjectDescr *)(Temp))->#(SysVar).#(Suc) ) if ( Temp == (Queue)Object ) return SDL_True; return SDL_False; } #ifndef XNOPROTO Queue Precede (Queue Q, ObjectInstance NewObject, ObjectInstance Object) #else Queue Precede (Q, NewObject, Object) Queue Q; ObjectInstance NewObject; ObjectInstance Object; #endif { #ifdef XTRACE if ( xShouldBeTraced(xListTraceLevel, (xPrsNode)0) ) xPrintString(" Precede\n"); #endif #ifdef XOPERRORF if ( Q==(Queue)0 ) { xSDLOpError("Precede in sort Queue", "Queue parameter is Null"); return (Queue)0; } if ( ((ObjectDescr *)(Q))->#(SysVar).#(TypeOfObject)!=xQHead ) { xSDLOpError("Precede in sort Queue", "Queue parameter is not a queue head"); return (Queue)0; } if ( NewObject==(ObjectInstance)0 ) { xSDLOpError("Precede in sort Queue", "New ObjectInstance parameter is Null"); return Q; } if ( NewObject->#(SysVar).#(TypeOfObject)!=xOI ) { xSDLOpError("Precede in sort Queue", "New ObjectInstance parameter is not an object instance"); return Q; } if ( NewObject->#(SysVar).#(Pre)!=(Queue)0 ) { xSDLOpError("Precede in sort Queue", "New ObjectInstance given as parameter is already in queue"); return Q; } if ( Object==(ObjectInstance)0 ) { xSDLOpError("Precede in sort Queue", "ObjectInstance parameter is Null"); return Q; } if ( Object->#(SysVar).#(TypeOfObject)!=xOI ) { xSDLOpError("Precede in sort Queue", "ObjectInstance parameter is not an object instance"); return Q; } if ( Object->#(SysVar).#(Pre)==(Queue)0 ) { xSDLOpError("Precede in sort Queue", "ObjectInstance given as parameter is not in queue"); return Q; } if ( ! Member(Q, Object) ) { xSDLOpError("Precede in sort Queue", "ObjectInstance parameter not member of Q"); return Q; } #endif NewObject->#(SysVar).#(Suc) = (Queue)Object; NewObject->#(SysVar).#(Pre) = Object->#(SysVar).#(Pre); ((ObjectDescr *)(Object->#(SysVar).#(Pre)))->#(SysVar).#(Suc) = (Queue)NewObject; Object->#(SysVar).#(Pre) = (Queue)NewObject; return Q; } #ifndef XNOPROTO ObjectInstance Predecessor (ObjectInstance Object) #else ObjectInstance Predecessor (Object) ObjectInstance Object; #endif { #ifdef XTRACE if ( xShouldBeTraced(xListTraceLevel, (xPrsNode)0) ) xPrintString(" Predecessor\n"); #endif #ifdef XOPERRORF if ( Object==(ObjectInstance)0 ) { xSDLOpError("Predecessor in sort Queue", "ObjectInstance parameter is Null"); return (ObjectInstance)0; } if ( Object->#(SysVar).#(TypeOfObject)!=xOI ) { xSDLOpError("Predecessor in sort Queue", "ObjectInstance parameter is not an object instance"); return (ObjectInstance)0; } if ( Object->#(SysVar).#(Pre)==(Queue)0 ) { xSDLOpError("Predecessor in sort Queue", "ObjectInstance given as parameter is not in queue"); return (ObjectInstance)0; } #endif if ( ((ObjectDescr *)(Object->#(SysVar).#(Pre)))->#(SysVar).#(TypeOfObject) == xOI ) return (ObjectInstance)Object->#(SysVar).#(Pre); return (ObjectInstance)0; } #ifndef XNOPROTO ObjectInstance Remove (ObjectInstance Object) #else ObjectInstance Remove (Object) ObjectInstance Object; #endif { #ifdef XTRACE if ( xShouldBeTraced(xListTraceLevel, (xPrsNode)0) ) xPrintString(" Remove\n"); #endif #ifdef XOPERRORF if ( Object==(ObjectInstance)0 ) { xSDLOpError("Remove in sort Queue", "ObjectInstance parameter is Null"); return (ObjectInstance)0; } if ( Object->#(SysVar).#(TypeOfObject)!=xOI ) { xSDLOpError("Remove in sort Queue", "ObjectInstance parameter is not an object instance"); return (ObjectInstance)0; } if ( Object->#(SysVar).#(Pre)==(Queue)0 ) { xSDLOpError("Remove in sort Queue", "ObjectInstance given as parameter is not in queue"); return Object; } #endif ((ObjectDescr *)(Object->#(SysVar).#(Suc)))->#(SysVar).#(Pre) = Object->#(SysVar).#(Pre); ((ObjectDescr *)(Object->#(SysVar).#(Pre)))->#(SysVar).#(Suc) = Object->#(SysVar).#(Suc); Object->#(SysVar).#(Pre) = (Queue)0; Object->#(SysVar).#(Suc) = (Queue)0; return Object; } #ifndef XNOPROTO ObjectInstance Successor (ObjectInstance Object) #else ObjectInstance Successor (Object) ObjectInstance Object; #endif { #ifdef XTRACE if ( xShouldBeTraced(xListTraceLevel, (xPrsNode)0) ) xPrintString(" Successor\n"); #endif #ifdef XOPERRORF if ( Object==(ObjectInstance)0 ) { xSDLOpError("Successor in sort Queue", "ObjectInstance parameter is Null"); return (ObjectInstance)0; } if ( Object->#(SysVar).#(TypeOfObject)!=xOI ) { xSDLOpError("Successor in sort Queue", "ObjectInstance parameter is not an object instance"); return (ObjectInstance)0; } if ( Object->#(SysVar).#(Pre)==(Queue)0 ) { xSDLOpError("Successor in sort Queue", "ObjectInstance given as parameter is not in queue"); return (ObjectInstance)0; } #endif if ( ((ObjectDescr *)(Object->#(SysVar).#(Suc)))->#(SysVar).#(TypeOfObject) == xOI ) return (ObjectInstance)Object->#(SysVar).#(Suc); return (ObjectInstance)0; } */ endnewtype Queue; newtype ObjectType literals xQHead /*#NAME 'xQHead'*/, xOI /*#NAME 'xOI'*/, xInAvail /*#NAME 'xInAvail'*/; /*#ADT(R(S)W(S))*/ endnewtype ObjectType; newtype SysTypeObject struct Pre, Suc Queue; /* ought to be ObjectInstance, Queue used as void *. */ TypeOfObject ObjectType; /*#ADT(A(S)R(S)W(H)) #HEADING #ifdef XREADANDWRITEF extern char * yWri_#(SysTypeObject) XPP((void * Value)); #endif #BODY #ifdef XREADANDWRITEF #ifndef XNOPROTO char * yWri_#(SysTypeObject) (void * Value) #else char * yWri_#(SysTypeObject) (Value) void * Value; #endif { return "..."; } #endif */ endnewtype SysTypeObject;