1 ! Copyright (C) 2010 Erik Charlebois.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors assocs byte-arrays combinators game.models
4 io.encodings.ascii io.files io.pathnames io.streams.byte-array
5 kernel namespaces sequences splitting
6 strings unicode.case arrays io.encodings ;
9 ERROR: unknown-models-extension extension ;
14 types [ H{ } clone ] initialize
16 : models-class ( path -- class )
17 file-extension >lower types get ?at
18 [ throw-unknown-models-extension ] unless second ;
20 : models-encoding ( path -- encoding )
21 file-extension >lower types get ?at
22 [ throw-unknown-models-extension ] unless first ;
24 : open-models-file ( path encoding -- stream )
29 GENERIC# load-models* 2 ( obj encoding class -- models )
31 GENERIC: stream>models ( stream class -- models )
33 : register-models-class ( extension encoding class -- )
34 2array swap types get set-at ;
36 : load-models ( path -- models )
37 [ dup models-encoding open-models-file ] [ models-encoding ] [ models-class ] tri load-models* ;
39 M: byte-array load-models*
40 [ <byte-reader> ] dip stream>models ;
42 M: decoder load-models* nip stream>models ;
44 M: string load-models* [ open-models-file ] dip stream>models ;
46 M: pathname load-models* [ open-models-file ] dip stream>models ;