You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.6 KiB
Racket
50 lines
1.6 KiB
Racket
7 years ago
|
#lang racket/base
|
||
7 years ago
|
(require racket/class sugar/class racket/generic racket/private/generic-methods)
|
||
7 years ago
|
(provide (all-defined-out))
|
||
|
|
||
7 years ago
|
(define-generics codable
|
||
|
(decode codable stream [parent])
|
||
|
(encode codable stream [val] [parent]))
|
||
7 years ago
|
|
||
|
|
||
7 years ago
|
(define codable<%>
|
||
7 years ago
|
(interface* ()
|
||
7 years ago
|
([(generic-property gen:codable)
|
||
|
(generic-method-table gen:codable
|
||
7 years ago
|
(define (decode o stream [parent #f]) (send o decode stream parent))
|
||
|
(define (encode o stream [val #f] [parent #f]) (send o encode stream val parent)))])))
|
||
|
|
||
|
|
||
|
(define-generics sizable
|
||
|
(size sizable [val] [parent]))
|
||
|
|
||
|
(define sizable<%>
|
||
|
(interface* ()
|
||
|
([(generic-property gen:sizable)
|
||
|
(generic-method-table gen:sizable
|
||
|
(define (size o [val #f] [parent #f]) (send o size val parent)))])))
|
||
|
|
||
|
|
||
|
(define-generics dumpable
|
||
|
(dump dumpable))
|
||
|
|
||
|
(define dumpable<%>
|
||
|
(interface* ()
|
||
|
([(generic-property gen:dumpable)
|
||
|
(generic-method-table gen:dumpable
|
||
|
(define (dump o) (send o dump)))])))
|
||
|
|
||
|
|
||
|
(define RestructureBase
|
||
7 years ago
|
(class* object% (codable<%> sizable<%> dumpable<%>)
|
||
7 years ago
|
(super-new)
|
||
7 years ago
|
(field [_hash (make-hash)]
|
||
|
[_list null])
|
||
7 years ago
|
(define/public (decode stream . args) (void))
|
||
7 years ago
|
(define/public (encode . xs) (void))
|
||
|
(define/public (size . xs) (void))
|
||
7 years ago
|
(define/public (process . args) (void))
|
||
7 years ago
|
(define/public (preEncode . args) (void))
|
||
|
(define/public (dump) (void))))
|
||
|
|
||
|
(define-class-predicates RestructureBase)
|