MACHINE Rename_str_obj(maxobj,maxmem)
CONSTRAINTS maxobj>0
SEES Bool_TYPE, String_TYPE, Rename_str_ctx
VARIABLES
Rename_strtok, Rename_strstruct, Rename_strmem
INVARIANT
Rename_strtok <: Rename_STROBJ &
Rename_strstruct: Rename_strtok --> STRING &
Rename_strmem : NAT
INITIALISATION
Rename_strtok, Rename_strstruct, Rename_strmem := {},{}, 0
OPERATIONS
/****************** General query functions *******************/
bb <-- Rename_MEM_FUL_STR_OBJ =
BEGIN
bb:=bool(Rename_strmem=maxmem)
END;
bb <-- Rename_OBJ_FUL_STR_OBJ =
BEGIN
bb:=bool(card(Rename_strtok) = maxobj)
END;
bb <-- Rename_XST_STR_OBJ(pp) =
PRE
pp: Rename_STROBJ
THEN
bb:=bool(pp:Rename_strtok)
END;
pp <-- Rename_ANY_STR_OBJ =
BEGIN
pp :: Rename_STROBJ
END;
/*************** Creating and deleting strings ******************/
Rename_INI_STR_OBJ =
BEGIN
Rename_strtok, Rename_strstruct, Rename_strmem := {},{}, 0
END;
bb,pp <-- Rename_CRE_STR_OBJ =
IF card(Rename_strtok) < maxobj THEN
ANY qq WHERE
qq: Rename_STROBJ - Rename_strtok
THEN
Rename_strstruct(qq):=<> ||
Rename_strtok := Rename_strtok \/ {qq} ||
pp:=qq ||
bb:= TRUE
END
ELSE
bb:=FALSE || pp :: Rename_STROBJ
END;
bb,pp <-- Rename_NEW_STR_OBJ(nn) =
PRE
card(Rename_strtok) < maxobj &
nn : STRING
/* Rename_strmem + size(nn) <= maxmem */
THEN
IF Rename_strmem + size(nn) <= maxmem THEN
ANY qq WHERE
qq: Rename_STROBJ - Rename_strtok
THEN
Rename_strstruct(qq):=nn ||
Rename_strtok := Rename_strtok \/ {qq} ||
Rename_strmem := Rename_strmem + size(nn) ||
pp:=qq ||
bb:=TRUE
END
ELSE
bb := FALSE ||
pp :: Rename_STROBJ
END
END;
Rename_KIL_STR_OBJ(pp) =
PRE
pp: Rename_strtok &
Rename_strmem >= size(Rename_strstruct(pp))
THEN
Rename_strstruct := {pp} <<| Rename_strstruct ||
Rename_strtok := Rename_strtok - {pp} ||
Rename_strmem := Rename_strmem - size(Rename_strstruct(pp))
END;
/*********************** Query operations ***********************/
vv <-- Rename_VAL_STR_OBJ(pp,ii) =
PRE
pp:Rename_strtok &
ii:dom(Rename_strstruct(pp))
THEN
vv:=Rename_strstruct(pp)(ii)
END;
bb <-- Rename_EMP_STR_OBJ(pp) =
PRE
pp: Rename_strtok
THEN
bb:=bool(Rename_strstruct(pp)=<>)
END;
bb <-- Rename_XST_IDX_STR_OBJ(pp,ii) =
PRE
pp: Rename_strtok &
ii: 1..maxmem
THEN
bb:=bool(ii:1..size(Rename_strstruct(pp)))
END;
nn <-- Rename_LEN_STR_OBJ(pp)=
PRE
pp: Rename_strtok
THEN
nn:=size(Rename_strstruct(pp))
END;
bb <-- Rename_SMR_STR_OBJ(ss,tt) =
PRE
tt : Rename_strtok &
ss : Rename_strtok
THEN
bb :: BOOL
END;
bb <-- Rename_EQL_STR_OBJ(ss,tt) =
PRE
tt : Rename_strtok &
ss : Rename_strtok
THEN
bb := bool(Rename_strstruct(tt) = Rename_strstruct(ss))
END;
bb <-- Rename_SUB_STR_OBJ(ss,tt) =
PRE
tt : Rename_strtok &
ss : Rename_strtok
THEN
bb := bool( Rename_strstruct(ss) <: Rename_strstruct(tt))
END;
bb <-- Rename_EQL_LIT_STR_OBJ(tt,nn) =
PRE
tt : Rename_strtok &
nn : STRING
THEN
bb := bool(Rename_strstruct(tt) = nn)
END;
ss <-- Rename_XTR_STR_OBJ(pp) =
PRE
pp : Rename_strtok
THEN
ss := Rename_strstruct(pp)
END;
/**************** String operations **************************/
Rename_CLR_STR_OBJ(pp) =
PRE
pp: Rename_strtok &
Rename_strmem >= size(Rename_strstruct(pp))
THEN
Rename_strstruct(pp) := <> ||
Rename_strmem := (
Rename_strmem - size(Rename_strstruct(pp))
)
END;
bb <-- Rename_PSH_STR_OBJ(pp,vv) =
PRE
pp:Rename_strtok &
vv: CHAR
/* Rename_strmem<maxmem */
THEN
IF Rename_strmemTHEN
Rename_strstruct(pp):=Rename_strstruct(pp) <- vv ||
Rename_strmem:=Rename_strmem+1 ||
bb:=TRUE
ELSE
bb:=FALSE
END
END;
Rename_KEP_STR_OBJ(pp,ii) =
PRE
pp:Rename_strtok &
ii:0..size(Rename_strstruct(pp)) &
Rename_strmem >= size(Rename_strstruct(pp))+ii
THEN
Rename_strstruct(pp):=Rename_strstruct(pp) /|\ ii ||
Rename_strmem:= (
Rename_strmem-size(Rename_strstruct(pp))+ii
)
END;
Rename_CUT_STR_OBJ(pp,ii) =
PRE
pp:Rename_strtok &
ii:0..size(Rename_strstruct(pp)) &
ii <= Rename_strmem
THEN
Rename_strstruct(pp):=Rename_strstruct(pp) \|/ ii ||
Rename_strmem:=Rename_strmem-ii
END;
Rename_REV_STR_OBJ(pp) =
PRE
pp:Rename_strtok
THEN
Rename_strstruct(pp):=rev(Rename_strstruct(pp))
END;
Rename_SWP_STR_OBJ(pp,ii,jj) =
PRE
pp:Rename_strtok &
ii:dom(Rename_strstruct(pp)) &
jj:dom(Rename_strstruct(pp))
THEN
Rename_strstruct(pp):= (
Rename_strstruct(pp) <+ (
{ii |-> Rename_strstruct(pp)(jj), jj |-> Rename_strstruct(pp)(ii)}
)
)
END;
Rename_POP_STR_OBJ(pp) =
PRE
pp:Rename_strtok &
size(Rename_strstruct(pp))/=0
THEN
Rename_strstruct(pp):= front(Rename_strstruct(pp)) ||
Rename_strmem:=Rename_strmem-1
END;
Rename_STO_STR_OBJ(pp,ii,vv) =
PRE
pp:Rename_strtok &
vv:CHAR &
ii:dom(Rename_strstruct(pp))
THEN
Rename_strstruct(pp)(ii):=vv
END;
bb <-- Rename_APP_STR_OBJ(pp,qq) =
PRE
pp:Rename_strtok &
qq:Rename_strtok
/* Rename_strmem+size(Rename_strstruct(qq))<=maxmem */
THEN
IF
Rename_strmem+size(Rename_strstruct(qq))<=maxmem
THEN
Rename_strstruct(pp):= (
Rename_strstruct(pp)^Rename_strstruct(qq)
) ||
Rename_strmem:= (
Rename_strmem+size(Rename_strstruct(qq))
)||
bb:=TRUE
ELSE
bb:=FALSE
END
END;
bb <-- Rename_CPY_STR_OBJ(pp,qq) =
PRE
pp:Rename_strtok &
qq:Rename_strtok
/* Rename_strmem- (
size(Rename_strstruct(qq))+size(Rename_strstruct(pp))
) <= maxmem */
THEN
IF Rename_strmem- (
size(Rename_strstruct(qq))+size(Rename_strstruct(pp))
) <= maxmem
THEN
Rename_strstruct(qq):=Rename_strstruct(pp) ||
Rename_strmem:= (
Rename_strmem- (
size(Rename_strstruct(qq))+size(Rename_strstruct(pp))
)
) ||
bb:=TRUE
ELSE
bb:=FALSE
END
END;
bb <-- Rename_OVR_STR_OBJ(pp,qq) =
PRE
pp:Rename_strtok &
qq:Rename_strtok
/* Rename_strmem + (
size(Rename_strstruct(qq))-size(Rename_strstruct(pp))
) <= maxmem */
THEN
IF
Rename_strmem+ (
size(Rename_strstruct(qq))-size(Rename_strstruct(pp))
) <= maxmem
THEN
Rename_strstruct(pp):= (
Rename_strstruct(pp) <+ Rename_strstruct(qq)
) ||
Rename_strmem:= (
Rename_strmem+ (
max({0,(size(Rename_strstruct(qq))-size(Rename_strstruct(pp)))})
)
)||
bb:=TRUE
ELSE
bb:=FALSE
END
END;
/******************** Persistent Data facilities ***********************/
/*********** save/restore host byte order ***********/
Rename_SAV_STR_OBJ =
BEGIN
skip
END;
Rename_RST_STR_OBJ =
ANY
sstrn,sstro,stotstr
WHERE
sstrn <: Rename_STROBJ &
sstro: sstrn --> STRING &
stotstr: NAT
THEN
Rename_strstruct := sstro ||
Rename_strtok := sstrn ||
Rename_strmem := stotstr
END;
/*********** save/restore network byte order ***********/
Rename_SAVN_STR_OBJ =
BEGIN
skip
END;
Rename_RSTN_STR_OBJ =
ANY
sstrn,sstro,stotstr
WHERE
sstrn <: Rename_STROBJ &
sstro: sstrn --> STRING &
stotstr: NAT
THEN
Rename_strstruct := sstro ||
Rename_strtok := sstrn ||
Rename_strmem := stotstr
END;
/**************************** Browsing ********************************/
nn,pp <-- Rename_FIRST_STR_OBJ =
IF not(Rename_strtok = {}) THEN
pp :: Rename_strtok ||
nn := card(Rename_strtok)
ELSE
pp :: Rename_STROBJ ||
nn := 0
END;
nn,qq <-- Rename_NEXT_STR_OBJ(mm,pp) =
PRE
pp : Rename_strtok &
mm : NAT1
THEN
nn := mm-1 ||
qq :: Rename_strtok
END
END
Analysed Constructs
Hypertext Constructs Page
On-line Help
Help Contents Page
Index
Document Last Updated: Wed Aug 25 17:37:07 1999

B-Toolkit Beta 4.55