]> gitweb.factorcode.org Git - factor.git/blob - extra/game/models/loader/loader.factor
factor: Rename GENERIC# to GENERIC#:.
[factor.git] / extra / game / models / loader / loader.factor
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 arrays io.encodings ;
7 IN: game.models.loader
8
9 ERROR: unknown-models-extension extension ;
10
11 <PRIVATE
12
13 SYMBOL: types
14 types [ H{ } clone ] initialize
15
16 : models-class ( path -- class )
17     file-extension >lower types get ?at
18     [ unknown-models-extension ] unless second ;
19
20 : models-encoding ( path -- encoding )
21     file-extension >lower types get ?at
22     [ unknown-models-extension ] unless first ;
23
24 : open-models-file ( path encoding -- stream )
25     <file-reader> ;
26
27 PRIVATE>
28
29 GENERIC#: load-models* 2 ( obj encoding class -- models )
30
31 GENERIC: stream>models ( stream class -- models )
32
33 : register-models-class ( extension encoding class -- )
34     2array swap types get set-at ;
35
36 : load-models ( path -- models )
37     [ dup models-encoding open-models-file ] [ models-encoding ] [ models-class ] tri load-models* ;
38
39 M: byte-array load-models*
40     [ <byte-reader> ] dip stream>models ;
41
42 M: decoder load-models* nip stream>models ;
43
44 M: string load-models* [ open-models-file ] dip stream>models ;
45
46 M: pathname load-models* [ open-models-file ] dip stream>models ;