Annotation of researchv10no/cmd/sml/src/basics/stamp.sml, revision 1.1

1.1     ! root        1: (* Copyright 1989 by AT&T Bell Laboratories *)
        !             2: signature STAMP =
        !             3: sig
        !             4:   type state
        !             5:   val new : int * int -> state
        !             6:   val current : state -> int * int
        !             7:   val move : state * (int * int) -> unit
        !             8:   val set : state * int * int -> unit
        !             9:   val newTyc : state -> int
        !            10:   val newStr : state -> int
        !            11:   val newRecord : int -> int
        !            12:   val base : int
        !            13:   val fixed : int -> bool
        !            14:   val bound : int -> bool
        !            15:   val global : state
        !            16:   val newSig : unit -> int
        !            17: end
        !            18: 
        !            19: structure Stamp : STAMP =
        !            20: struct
        !            21: 
        !            22:   type state = {tycCount : int ref, strCount : int ref}
        !            23: 
        !            24:   fun new(t: int, s: int) = {tycCount = ref t, strCount = ref s}
        !            25: 
        !            26:   fun current({tycCount,strCount}: state) = (!tycCount, !strCount)
        !            27: 
        !            28:   fun set({tycCount,strCount}: state, t: int, s: int) =
        !            29:       (tycCount := t; strCount := s)
        !            30: 
        !            31:   fun move({tycCount,strCount}: state, (t: int, s: int)) =
        !            32:       (tycCount := !tycCount + t; strCount := !strCount + s)
        !            33: 
        !            34:   fun newTyc({tycCount,...}: state) =
        !            35:       !tycCount before inc tycCount
        !            36: 
        !            37:   fun newStr({strCount,...}: state) =
        !            38:       !strCount before inc strCount
        !            39: 
        !            40: 
        !            41:   val base = 1000000
        !            42: 
        !            43:   fun fixed s = s >= base
        !            44: 
        !            45:   fun bound s = s < base
        !            46: 
        !            47:   fun newRecord(n:int) = base + (n mod base)
        !            48:     (* this allows a slight possibility that two distinct record tycons may
        !            49:        be given the same stamp *)
        !            50: 
        !            51:   val global = new(2*base, 2*base)
        !            52: 
        !            53: 
        !            54:  (* signature stamp generator *)
        !            55: 
        !            56:   val sigCount = ref(1)
        !            57:   fun newSig () = !sigCount before inc sigCount
        !            58: 
        !            59: end (* structure Stamp *)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.