summaryrefslogtreecommitdiffstats
path: root/srfi-125-impl.scm
blob: 67da668020bc95ca236914601efc7d1262815cef (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
(define (register-srfi-125!)

  (define (hash-table-set!* table . obj)
    (apply hash-table-set! (cons table obj))
    table)

  (define (hash-table-update!* table key updater fail success)
    (hash-table-update! table key updater fail success)
    table)

  (define (hash-table-update!/default* table key proc default)
    (hash-table-update!/default table key proc default)
    table)

  (define (hash-table-intern!* table key failure)
    (define val (hash-table-intern! table key failure))
    (values table val))

  (define (hash-table-pop!* table)
    (if (hash-table-empty? table)
        (error "popped empty dictionary")
        (call-with-values
          (lambda () (hash-table-pop! table))
          (lambda (key value) (values table key value)))))

  (define (hash-table-delete-all!* table keys)
    (for-each
      (lambda (key)
        (hash-table-delete! table key))
      keys)
    table)

  (define (hash-table-map!* proc table)
    (hash-table-map! proc table)
    table)

  (define (hash-table-filter* proc table)
    (hash-table-prune!
      (lambda (key value)
        (not (proc key value)))
      table)
    table)

  (define (hash-table-remove!* proc table)
    (hash-table-prune! proc table)
    table)

  (define (hash-table-search* table key fail success)
    (define (handle-success value)
      (define (update new-key new-value obj)
        (unless (eq? new-key key)
          (hash-table-delete! table key))
        (hash-table-set! table new-key new-value)
        (values table obj))
      (define (remove obj)
        (hash-table-delete! table key)
        (values table obj))
      (success key value update remove))
    (define (handle-fail)
      (define (ignore obj)
        (values table obj))
      (define (insert value obj)
        (hash-table-set! table key value)
        (values table obj))
      (fail insert ignore))

    (define default (cons #f #f))
    (hash-table-ref table key handle-fail handle-success))

  (register-dictionary!
    'dictionary? hash-table?
    'dict-empty? hash-table-empty?
    'dict-contains? hash-table-contains?
    'dict-ref hash-table-ref
    'dict-ref/default hash-table-ref/default
    'dict-set! hash-table-set!*
    'dict-delete-all! hash-table-delete-all!*
    'dict-intern! hash-table-intern!*
    'dict-update! hash-table-update!*
    'dict-update/default! hash-table-update!/default*
    'dict-pop! hash-table-pop!*
    'dict-map! hash-table-map!*
    'dict-filter! hash-table-filter*
    'dict-remove! hash-table-remove!*
    'dict-search! hash-table-search*
    'dict-size hash-table-size
    'dict-for-each hash-table-for-each
    'dict-keys hash-table-keys
    'dict-values hash-table-values
    'dict-entries hash-table-entries
    'dict-fold hash-table-fold
    'dict-map->list hash-table-map->list
    'dict->alist hash-table->alist))
lass='nohover-highlight'> git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@105 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-03-26add raw1394_new_handle_on_port() convenience functionGravatar dmaas 2-1/+41 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@104 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-02-22Updates for new rawiso ioctl interface.Gravatar bencollins 3-37/+125 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@103 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-01-15add iso_xmit_sync() and iso_xmit_write(); clean up iso handling a bitGravatar dmaas 5-39/+161 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@102 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-01-15implement tag matching for rawiso receptionGravatar dmaas 3-4/+12 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@101 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-01-06back out previous commit - don't drop the legacy API just yetGravatar dmaas 6-173/+130 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@100 53a565d1-3bb7-0310-b661-cf11e63c67ab 2003-01-05emulate legacy ISO reception API on top of new rawiso APIGravatar dmaas 7-131/+174 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@99 53a565d1-3bb7-0310-b661-cf11e63c67ab 2002-12-24update iso API for multi-channel reception and new packet buffer layoutGravatar dmaas 4-123/+236 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@98 53a565d1-3bb7-0310-b661-cf11e63c67ab 2002-12-20oops, irq_interval needs to be signedGravatar anonymous 1-1/+1 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@97 53a565d1-3bb7-0310-b661-cf11e63c67ab 2002-12-20dmaas - renamed exported arm definitions into the raw1394_ namespace; ↵Gravatar anonymous 3-124/+48 brought kernel-raw1394.h back in sync with the kernel version git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@96 53a565d1-3bb7-0310-b661-cf11e63c67ab 2002-12-16rawiso updates:Gravatar dmaas 3-18/+25 - changed return type of rawiso xmit/recv handlers from int to enum raw1394_iso_disposition - added an ioctl (RAW1394_ISO_QUEUE_ACTIVITY) to force an ISO_ACTIVITY event into the queue. This is needed for handling RAW1394_ISO_DEFER, to kick us out of the next read() instead of sleeping forever. - removed references to "8-byte" isochronous header - this is an OHCI-specific implementation detail git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@95 53a565d1-3bb7-0310-b661-cf11e63c67ab 2002-11-18fix cplusplus extern C blockGravatar ddennedy 1-4/+4 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@94 53a565d1-3bb7-0310-b661-cf11e63c67ab 2002-11-18merged rawiso branchGravatar ddennedy 7-6/+488 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@93 53a565d1-3bb7-0310-b661-cf11e63c67ab