;;;; -*- Scheme -*- ;; ;; Beacons example for HLSIM ;; ;; David DeRoure June 12 1997, revised Sep 10 1997 ;; dder@martigny.ai.mit.edu ;; ;; This definition file is used by beacons1.scm. It should be compiled ;; with (cf "beacons1d") and loaded with (load "beacons1d"). See ;; beacons1s.scm for the simulation setup. See the HLSIM documentation ;; for further details. (declare (usual-integrations)) ;; The message constructor and accessors. We use the message format ;; defined in util1d.scm. (define (make-message source id ttl color) (vector 'beacon source color ttl id)) (define message-source message.source) ; processor id of originator (define message-id message.id) ; message id (define message-ttl message.ttl) ; ttl = time-to-live = hopcount (define message-color message.data) ; message color ;; To keep track of messages that have already been rebroadcast by the ;; propagators, the procedure new-message? checks for the message source ;; and id in a table which is updated when new messages first arrive. ;; If present in the table, new-message? returns #F, else it updates ;; the table of messages-received and returns #T so that the rebroadcast ;; occurs. (define (make-table) (make-eqv-hash-table 2)) (define (new-message? message message-table) (let ((ids (hash-table/get message-table (message-source message) '()))) (if (member (message-id message) ids) #F (begin (hash-table/put! message-table (message-source message) (cons (message-id message) ids)) #T)))) ;; end of beacons1d.scm