MACHINE Rename_fnc_obj(VALUE,maxfld,maxobj)
CONSTRAINTS maxobj>0
SEES file_dump,Bool_TYPE, Rename_fnc_ctx
VARIABLES Rename_fnctok, Rename_fncstruct,Rename_locate
INVARIANT
Rename_fnctok <: Rename_FNCOBJ &
Rename_fncstruct: Rename_fnctok --> (1..maxfld +-> VALUE) &
Rename_locate : 1..card(Rename_fnctok) >->> Rename_fnctok
INITIALISATION
Rename_fnctok, Rename_fncstruct, Rename_locate:= {},{},{}
OPERATIONS
/***************** General query functions ********************/
bb <-- Rename_FUL_FNC_OBJ =
BEGIN
bb:=bool(card(Rename_fnctok) = maxobj)
END;
bb <-- Rename_TST_FLD_FNC_OBJ(ii) =
PRE
ii: NAT
THEN
bb:=bool(ii: 1..maxfld)
END;
vv <-- Rename_ANY_FNC_OBJ =
BEGIN
vv::Rename_FNCOBJ
END;
/*********** Creating, killing and testing for existence ********/
bb,pp <-- Rename_CRE_FNC_OBJ =
IF card(Rename_fnctok) < maxobj THEN
ANY qq,ll WHERE
qq: Rename_FNCOBJ - Rename_fnctok &
ll : 1..card(Rename_fnctok)+1 >->> (Rename_fnctok \/ {qq})
THEN
Rename_fncstruct(qq):={} ||
Rename_fnctok := Rename_fnctok \/ {qq} ||
Rename_locate := ll ||
pp:=qq ||
bb:= TRUE
END
ELSE
bb:= FALSE || pp :: Rename_FNCOBJ
END;
Rename_KIL_FNC_OBJ(ff) =
PRE
ff: Rename_fnctok
THEN
Rename_fncstruct := {ff} <<| Rename_fncstruct ||
Rename_fnctok := Rename_fnctok - {ff} ||
Rename_locate :: (
1..card(Rename_fnctok)-1 >->> (Rename_fnctok-{ff})
)
END;
Rename_INI_FNC_OBJ =
BEGIN
Rename_fncstruct := {} ||
Rename_fnctok := {} ||
Rename_locate := {}
END;
bb <-- Rename_XST_FNC_OBJ(pp) =
PRE
pp: Rename_FNCOBJ
THEN
bb:=bool(pp:Rename_fnctok)
END;
/********** Query functions for individual functions **************/
bb <-- Rename_DEF_FNC_OBJ(ff,ii) =
PRE
ff: Rename_fnctok &
ii: 1..maxfld
THEN
bb := bool(ii: dom(Rename_fncstruct(ff)))
END;
vv <-- Rename_VAL_FNC_OBJ(ff,ii) =
PRE
ff: Rename_fnctok &
ii: dom(Rename_fncstruct(ff))
THEN
vv := Rename_fncstruct(ff)(ii)
END;
/****** Operations for manipulating individual functions *********/
Rename_STO_FNC_OBJ(ff,ii,vv) =
PRE
ff: Rename_fnctok &
ii: 1..maxfld &
vv: VALUE
THEN
Rename_fncstruct(ff)(ii) := vv
END;
Rename_RMV_FNC_OBJ(ff,ii) =
PRE
ff: Rename_fnctok &
ii: 1..maxfld
THEN
Rename_fncstruct(ff) := {ii} <<| Rename_fncstruct(ff)
END;
/************* Persistent data facilities ************************/
/*********** save/restore host byte order ***********/
Rename_SAV_FNC_OBJ =
BEGIN
skip
END;
Rename_RST_FNC_OBJ =
ANY
sfncn,sfnco,loc
WHERE
sfncn <: Rename_FNCOBJ &
sfnco: sfncn --> (1..maxfld +-> VALUE) &
loc : 1..card(sfncn) >->> sfncn
THEN
Rename_fncstruct := sfnco ||
Rename_fnctok := sfncn ||
Rename_locate := loc
END;
/*********** save/restore network byte order ***********/
Rename_SAVN_FNC_OBJ =
BEGIN
skip
END;
Rename_RSTN_FNC_OBJ =
ANY
sfncn,sfnco,loc
WHERE
sfncn <: Rename_FNCOBJ &
sfnco: sfncn --> (1..maxfld +-> VALUE) &
loc : 1..card(sfncn) >->> sfncn
THEN
Rename_fncstruct := sfnco ||
Rename_fnctok := sfncn ||
Rename_locate := loc
END;
/********************* Browsing facilities ************************/
nn,pp <-- Rename_FIRST_FNC_OBJ =
IF not(Rename_fnctok = {}) THEN
pp := Rename_locate(card(Rename_fnctok)) ||
nn := card(Rename_fnctok)
ELSE
pp :: Rename_FNCOBJ ||
nn := 0
END;
nn,qq <-- Rename_NEXT_FNC_OBJ(mm,pp) =
PRE
pp : Rename_fnctok &
mm : 1..card(Rename_fnctok)
THEN
nn:= mm-1 ||
IF mm /=1 THEN
qq := Rename_locate(mm-1)
ELSE
qq :: Rename_fnctok
END
END
END
Analysed Constructs
Hypertext Constructs Page
On-line Help
Help Contents Page
Index
Document Last Updated: Wed Aug 25 17:36:41 1999

B-Toolkit Beta 4.55