MACHINE Rename_set_obj(VALUE,maxobj,maxmem)
CONSTRAINTS maxobj>0
SEES Bool_TYPE, Rename_set_ctx
VARIABLES Rename_settok, Rename_setstruct, Rename_setord
INVARIANT
Rename_settok <: Rename_SETOBJ &
Rename_setstruct: Rename_settok --> FIN(VALUE) &
Rename_setord: Rename_settok --> seq(VALUE) &
!rx.(
rx:Rename_settok => Rename_setord(rx) : perm(Rename_setstruct(rx))
)
INITIALISATION
Rename_settok, Rename_setstruct, Rename_setord := {},{},{}
OPERATIONS
/**************** General Query functions ***********************/
bb <-- Rename_MEM_FUL_SET_OBJ =
BEGIN
bb::BOOL
END;
bb <-- Rename_OBJ_FUL_SET_OBJ =
BEGIN
bb:=bool(card(Rename_settok) = maxobj)
END;
pp <-- Rename_ANY_SET_OBJ =
BEGIN
pp :: Rename_SETOBJ
END;
bb <-- Rename_XST_SET_OBJ(pp) =
PRE
pp: Rename_SETOBJ
THEN
bb:=bool(pp:Rename_settok)
END;
/************ Operations for introducing and deleting sets **********/
Rename_INI_SET_OBJ =
BEGIN
Rename_settok, Rename_setstruct, Rename_setord := {},{},{}
END;
bb,pp <-- Rename_CRE_SET_OBJ =
IF card(Rename_settok) < maxobj THEN
ANY qq WHERE
qq: Rename_SETOBJ - Rename_settok
THEN
Rename_setstruct(qq):={} ||
Rename_setord(qq):=<> ||
Rename_settok := Rename_settok \/ {qq} ||
pp:=qq ||
bb := TRUE
END
ELSE
bb:= FALSE || pp :: Rename_SETOBJ
END;
Rename_KIL_SET_OBJ(qq) =
PRE
qq: Rename_settok
THEN
Rename_setstruct := {qq} <<| Rename_setstruct ||
Rename_setord := {qq} <<| Rename_setord ||
Rename_settok := Rename_settok - {qq}
END;
/************ Accessing a set using ordinal number *****************/
bb <-- Rename_XST_ORD_SET_OBJ(pp,ii) =
PRE
pp: Rename_settok &
ii: NAT
THEN
bb:=bool(ii:1.. card(Rename_setstruct(pp)))
END;
vv <-- Rename_VAL_SET_OBJ(pp,ii) =
PRE
pp: Rename_settok &
ii: 1.. card(Rename_setstruct(pp))
THEN
vv:=Rename_setord(pp)(ii)
END;
/************* Operations for individual sets *********************/
Rename_CLR_SET_OBJ(pp) =
PRE
pp: Rename_settok
THEN
Rename_setstruct(pp):={}||
Rename_setord(pp):=<>
END;
bb <-- Rename_UNION_SET_OBJ(ss,tt) =
PRE
ss: Rename_settok &
tt: Rename_settok
THEN
CHOICE
Rename_setstruct(ss) := Rename_setstruct(ss) \/ Rename_setstruct(tt) ||
ANY xx WHERE
xx : seq(VALUE) &
xx:perm(Rename_setstruct(ss) \/ Rename_setstruct(tt))
THEN
Rename_setord(ss) := xx
END ||
bb:=TRUE
OR
bb:=FALSE
END
END;
Rename_DIFF_SET_OBJ(ss,tt) =
PRE
ss: Rename_settok &
tt: Rename_settok
THEN
Rename_setstruct(ss) := Rename_setstruct(ss) - Rename_setstruct(tt) ||
ANY xx WHERE
xx : seq(VALUE) &
xx:perm(Rename_setstruct(ss) - Rename_setstruct(tt))
THEN
Rename_setord(ss) := xx
END
END;
Rename_INTER_SET_OBJ(ss,tt) =
PRE
ss: Rename_settok &
tt: Rename_settok
THEN
Rename_setstruct(ss) := Rename_setstruct(ss) /\ Rename_setstruct(tt) ||
ANY xx WHERE
xx : seq(VALUE) &
xx:perm(Rename_setstruct(ss) /\ Rename_setstruct(tt))
THEN
Rename_setord(ss) := xx
END
END;
bb <-- Rename_ENT_SET_OBJ(ss,vv) =
PRE
ss: Rename_settok &
vv: VALUE
THEN
CHOICE
Rename_setstruct(ss) := Rename_setstruct(ss) \/ {vv} ||
ANY xx WHERE
xx : seq(VALUE) &
xx:perm(Rename_setstruct(ss) \/ {vv})
THEN
Rename_setord(ss) := xx
END ||
bb:=TRUE
OR
bb:=FALSE
END
END;
Rename_RMV_SET_OBJ(ss,vv) =
PRE
ss: Rename_settok &
vv: VALUE
THEN
Rename_setstruct(ss) := Rename_setstruct(ss) - {vv} ||
ANY xx WHERE
xx : seq(VALUE) &
xx:perm(Rename_setstruct(ss) -{vv})
THEN
Rename_setord(ss) := xx
END
END;
bb <-- Rename_CPY_SET_OBJ(pp,qq) =
PRE
pp:Rename_settok &
qq:Rename_settok
THEN
CHOICE
Rename_setstruct(qq):=Rename_setstruct(pp) ||
Rename_setord(qq):=Rename_setord(pp) ||
bb:=TRUE
OR
bb:=FALSE
END
END;
/**************** Query functions for individual sets **************/
bb <-- Rename_EMP_SET_OBJ(pp) =
PRE
pp: Rename_settok
THEN
bb:=bool(Rename_setstruct(pp)={})
END;
nn <-- Rename_CRD_SET_OBJ(pp) =
PRE
pp: Rename_settok
THEN
nn:=card(Rename_setstruct(pp))
END;
bb <-- Rename_INCL_SET_OBJ(tt,ss) =
PRE
ss: Rename_settok &
tt: Rename_settok
THEN
bb:=bool(Rename_setstruct(tt) <: Rename_setstruct(ss))
END;
bb <-- Rename_MBR_SET_OBJ(ss,vv) =
PRE
ss: Rename_settok &
vv: VALUE
THEN
bb:=bool(vv: Rename_setstruct(ss))
END;
/************** Persistent data facilities *************************/
/*********** save/restore host byte order ***********/
Rename_SAV_SET_OBJ =
BEGIN
skip
END;
Rename_RST_SET_OBJ =
ANY
ssetn,sseto,ssetord
WHERE
ssetn <: Rename_SETOBJ &
sseto: ssetn --> FIN(VALUE) &
ssetord: ssetn --> seq(VALUE) &
!pp.(pp:ssetn => ssetord(pp) : perm(sseto(pp)))
THEN
Rename_setstruct := sseto ||
Rename_settok := ssetn ||
Rename_setord := ssetord
END;
/*********** save/restore network byte order ***********/
Rename_SAVN_SET_OBJ =
BEGIN
skip
END;
Rename_RSTN_SET_OBJ =
ANY
ssetn,sseto,ssetord
WHERE
ssetn <: Rename_SETOBJ &
sseto: ssetn --> FIN(VALUE) &
ssetord: ssetn --> seq(VALUE) &
!pp.(pp:ssetn => ssetord(pp) : perm(sseto(pp)))
THEN
Rename_setstruct := sseto ||
Rename_settok := ssetn ||
Rename_setord := ssetord
END;
/********************** Browsing facilities ************************/
nn,pp <-- Rename_FIRST_SET_OBJ =
IF not(Rename_settok = {}) THEN
pp :: Rename_settok ||
nn := card(Rename_settok)
ELSE
pp :: Rename_SETOBJ ||
nn := 0
END;
nn,qq <-- Rename_NEXT_SET_OBJ(mm,pp) =
PRE
pp : Rename_settok &
mm : NAT1
THEN
nn := mm-1 ||
qq :: Rename_settok
END;
/********************** Input Output facilities ************************/
Rename_OUTPUT_SET_OBJ(SS,pp) =
PRE
SS <: VALUE &
pp: Rename_settok
THEN
skip
END;
bb <-- Rename_INPUT_SET_OBJ(SS,pp,ll) =
PRE
SS <: VALUE &
pp: Rename_settok &
ll: 1..250
THEN
CHOICE
ANY ss,pss WHERE
ss <: VALUE &
pss : seq(VALUE) &
pss : perm(ss \/ Rename_setstruct(pp))
THEN
Rename_setstruct(pp) := ss \/ Rename_setstruct(pp) ||
Rename_setord(pp) := pss ||
bb := TRUE
END
OR
bb := FALSE
END
END
END
/*" \newpage "*/
Analysed Constructs
Hypertext Constructs Page
On-line Help
Help Contents Page
Index
Document Last Updated: Wed Aug 25 17:36:59 1999

B-Toolkit Beta 4.55