123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- MODULE Models;
- (* THIS IS TEXT COPY OF BlackBox 1.6-rc6 System/Mod/Models.odc *)
- (* DO NOT EDIT *)
- IMPORT Kernel, Stores, Sequencers;
- CONST
- minVersion = 0; maxVersion = 0;
- clean* = Sequencers.clean;
- notUndoable* = Sequencers.notUndoable;
- invisible* = Sequencers.invisible;
- TYPE
- Model* = POINTER TO ABSTRACT RECORD (Stores.Store)
- era: INTEGER; (* stable era >= x *)
- guard: INTEGER (* = TrapCount()+1 if model is addressee of ongoing broadcast *)
- END;
- Context* = POINTER TO ABSTRACT RECORD END;
- Proposal* = ABSTRACT RECORD END;
- Message* = ABSTRACT RECORD
- model-: Model;
- era-: INTEGER
- END;
- NeutralizeMsg* = RECORD (Message) END;
- UpdateMsg* = EXTENSIBLE RECORD (Message) END;
-
- VAR domainGuard: INTEGER; (* = TrapCount()+1 if domain is addressee of ongoing domaincast *)
- (** Model **)
- PROCEDURE (m: Model) Internalize- (VAR rd: Stores.Reader), EXTENSIBLE;
- VAR thisVersion: INTEGER;
- BEGIN
- m.Internalize^(rd);
- IF rd.cancelled THEN RETURN END;
- rd.ReadVersion(minVersion, maxVersion, thisVersion)
- END Internalize;
- PROCEDURE (m: Model) Externalize- (VAR wr: Stores.Writer), EXTENSIBLE;
- BEGIN
- m.Externalize^(wr);
- wr.WriteVersion(maxVersion)
- END Externalize;
-
- (** Context **)
- PROCEDURE (c: Context) ThisModel* (): Model, NEW, ABSTRACT;
- PROCEDURE (c: Context) Normalize* (): BOOLEAN, NEW, ABSTRACT;
- PROCEDURE (c: Context) GetSize* (OUT w, h: INTEGER), NEW, ABSTRACT;
- PROCEDURE (c: Context) SetSize* (w, h: INTEGER), NEW, EMPTY;
- PROCEDURE (c: Context) MakeVisible* (l, t, r, b: INTEGER), NEW, EMPTY;
- PROCEDURE (c: Context) Consider* (VAR p: Proposal), NEW, EMPTY;
- (** miscellaneous **)
- PROCEDURE Era* (m: Model): INTEGER;
- BEGIN
- ASSERT(m # NIL, 20);
- RETURN m.era
- END Era;
- PROCEDURE CopyOf* (m: Model): Model;
- BEGIN
- ASSERT(m # NIL, 20);
- RETURN Stores.CopyOf(m)(Model)
- END CopyOf;
- PROCEDURE BeginScript* (m: Model; name: Stores.OpName; OUT script: Stores.Operation);
- (** post: (script # NIL) iff (m.domain # NIL) **)
- VAR seq: ANYPTR;
- BEGIN
- ASSERT(m # NIL, 20);
- IF m.Domain() # NIL THEN seq := m.Domain().GetSequencer() ELSE seq := NIL END;
- IF seq # NIL THEN
- WITH seq: Sequencers.Sequencer DO
- seq.BeginScript(name, script)
- ELSE
- END
- ELSE script := NIL
- END
- END BeginScript;
- PROCEDURE Do* (m: Model; name: Stores.OpName; op: Stores.Operation);
- (** pre: m # NIL, op # NIL, ~op.inUse **)
- VAR seq: ANYPTR;
- BEGIN
- ASSERT(m # NIL, 20); ASSERT(op # NIL, 21); (* ASSERT(~op.inUse, 22); *)
- IF m.Domain() # NIL THEN seq := m.Domain().GetSequencer() ELSE seq := NIL END;
- IF seq # NIL THEN
- WITH seq: Sequencers.Sequencer DO
- seq.Do(m, name, op)
- ELSE
- op.Do
- END
- ELSE
- op.Do
- END
- END Do;
- PROCEDURE LastOp* (m: Model): Stores.Operation;
- (** pre: m # NIL **)
- VAR seq: ANYPTR;
- BEGIN
- ASSERT(m # NIL, 20);
- IF m.Domain() # NIL THEN seq := m.Domain().GetSequencer() ELSE seq := NIL END;
- IF seq # NIL THEN
- WITH seq: Sequencers.Sequencer DO
- RETURN seq.LastOp(m)
- ELSE
- RETURN NIL
- END
- ELSE
- RETURN NIL
- END
- END LastOp;
- PROCEDURE Bunch* (m: Model);
- (** pre: m # NIL, m.Domain() # NIL **)
- VAR seq: ANYPTR;
- BEGIN
- ASSERT(m # NIL, 20); ASSERT(m.Domain() # NIL, 21);
- seq := m.Domain().GetSequencer();
- ASSERT(seq # NIL, 22);
- WITH seq: Sequencers.Sequencer DO
- seq.Bunch(m)
- ELSE
- END
- END Bunch;
- PROCEDURE StopBunching* (m: Model);
- (** pre: m # NIL **)
- VAR seq: ANYPTR;
- BEGIN
- ASSERT(m # NIL, 20);
- IF m.Domain() # NIL THEN seq := m.Domain().GetSequencer() ELSE seq := NIL END;
- IF seq # NIL THEN
- WITH seq: Sequencers.Sequencer DO
- seq.StopBunching
- ELSE
- END
- END
- END StopBunching;
- PROCEDURE EndScript* (m: Model; script: Stores.Operation);
- (** pre: (script # NIL) iff (m.seq # NIL) **)
- VAR seq: ANYPTR;
- BEGIN
- ASSERT(m # NIL, 20);
- IF m.Domain() # NIL THEN seq := m.Domain().GetSequencer() ELSE seq := NIL END;
- IF seq # NIL THEN
- ASSERT(script # NIL, 21);
- WITH seq: Sequencers.Sequencer DO
- seq.EndScript(script)
- ELSE
- ASSERT(script = NIL, 21)
- END
- ELSE
- ASSERT(script = NIL, 21)
- END
- END EndScript;
- PROCEDURE BeginModification* (type: INTEGER; m: Model);
- (** pre: m # NIL **)
- VAR seq: ANYPTR;
- BEGIN
- ASSERT(m # NIL, 20);
- IF m.Domain() # NIL THEN seq := m.Domain().GetSequencer() ELSE seq := NIL END;
- IF seq # NIL THEN
- WITH seq: Sequencers.Sequencer DO
- seq.BeginModification(type, m)
- ELSE
- END
- END
- END BeginModification;
- PROCEDURE EndModification* (type: INTEGER; m: Model);
- (** pre: m # NIL **)
- VAR seq: ANYPTR;
- BEGIN
- ASSERT(m # NIL, 20);
- IF m.Domain() # NIL THEN seq := m.Domain().GetSequencer() ELSE seq := NIL END;
- IF seq # NIL THEN
- WITH seq: Sequencers.Sequencer DO
- seq.EndModification(type, m)
- ELSE
- END
- END
- END EndModification;
- PROCEDURE SetDirty* (m: Model);
- (** pre: m # NIL **)
- VAR seq: ANYPTR;
- BEGIN
- ASSERT(m # NIL, 20);
- IF m.Domain() # NIL THEN seq := m.Domain().GetSequencer() ELSE seq := NIL END;
- IF seq # NIL THEN
- WITH seq: Sequencers.Sequencer DO
- seq.SetDirty(TRUE)
- ELSE
- END
- END
- END SetDirty;
- PROCEDURE Domaincast* (d: Stores.Domain; VAR msg: Message);
- VAR g: INTEGER; seq: ANYPTR;
- BEGIN
- IF d # NIL THEN
- seq := d.GetSequencer();
- IF (seq # NIL) & (seq IS Sequencers.Sequencer) THEN
- msg.model := NIL; msg.era := -1;
- g := Kernel.trapCount + 1;
- IF domainGuard > 0 THEN ASSERT(domainGuard # g, 20) END;
- domainGuard := g;
- seq(Sequencers.Sequencer).Handle(msg);
- domainGuard := 0
- END
- END
- END Domaincast;
- PROCEDURE Broadcast* (m: Model; VAR msg: Message);
- (** pre: model # NIL **)
- (** post: model.era > model.era', msg.model = model, msg.era = model.era' + 1,
- model.seq # NIL => msg sent to seq **)
- VAR seq: ANYPTR; g: INTEGER;
- BEGIN
- ASSERT(m # NIL, 20);
- msg.model := m;
- IF m.Domain() # NIL THEN seq := m.Domain().GetSequencer() ELSE seq := NIL END;
- IF seq # NIL THEN
- WITH seq: Sequencers.Sequencer DO
- INC(m.era); msg.era := m.era;
- g := Kernel.trapCount + 1;
- IF m.guard > 0 THEN ASSERT(m.guard # g, 21) END;
- m.guard := g;
- seq.Handle(msg);
- m.guard := 0
- ELSE
- END
- END
- END Broadcast;
- BEGIN
- domainGuard := 0
- END Models.
|