File: array-struct.rkt

package info (click to toggle)
racket 7.2%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 125,432 kB
  • sloc: ansic: 258,980; pascal: 59,975; sh: 33,650; asm: 13,558; lisp: 7,124; makefile: 3,329; cpp: 2,889; exp: 499; python: 274; xml: 11
file content (75 lines) | stat: -rw-r--r-- 2,104 bytes parent folder | download | duplicates (11)
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
#lang racket/base

(require typed/untyped-utils
         typed/racket/base
         (for-syntax racket/base syntax/parse)
         "array-syntax.rkt"
         (except-in "typed-array-struct.rkt"
                    build-array
                    build-simple-array
                    list->array))

(require/untyped-contract
 (begin (require (only-in "typed-array-struct.rkt" Array)))
 "typed-array-struct.rkt"
 [build-array  (All (A) ((Vectorof Integer) ((Vectorof Index) -> A) -> (Array A)))]
 [build-simple-array  (All (A) ((Vectorof Integer) ((Vectorof Index) -> A) -> (Array A)))]
 [list->array (All (A) (case-> ((Listof A) -> (Array A))
                               ((Vectorof Integer) (Listof A) -> (Array A))))])

(define-syntax array? (make-rename-transformer #'Array?))
(define-syntax array-shape (make-rename-transformer #'Array-shape))
(define-syntax array-size (make-rename-transformer #'Array-size))
(define-syntax unsafe-array-proc (make-rename-transformer #'Array-unsafe-proc))

(provide
 ;; Array
 Array
 array?
 array-shape
 array-dims
 array-size
 array-strictness
 array-strict
 array-strict!
 array-default-strict
 array-default-strict!
 array-strict?
 build-array
 build-simple-array
 list->array
 make-unsafe-array-proc
 unsafe-build-array
 unsafe-build-simple-array
 unsafe-list->array
 unsafe-array-proc
 array-lazy
 array
 ;; Settable-Array
 Settable-Array
 settable-array?
 unsafe-settable-array-set-proc
 make-unsafe-array-set-proc
 ;; Printing
 print-array-fields
 array-custom-printer
 ;; Misc
 array-lift-comparison)

(define-syntax (array stx)
  (syntax-parse stx #:literals (:)
    [(_ e:expr)
     (syntax/loc stx (array/syntax array list unsafe-list->array e))]
    [(_ e:expr : T:expr)
     (syntax/loc stx (array/syntax array (inst list T) unsafe-list->array e))]
    [_:id  (raise-syntax-error 'array "not allowed as an expression" stx)]))

(define-syntax-rule (array-strict arr-expr)
  (let ([arr arr-expr])
    (array-strict! arr)
    arr))

(define-syntax-rule (array-default-strict arr-expr)
  (let ([arr arr-expr])
    (array-default-strict! arr)
    arr))