diff options
author | Joe Crayne <joe@jerkface.net> | 2019-06-14 03:13:25 -0400 |
---|---|---|
committer | Joe Crayne <joe@jerkface.net> | 2019-06-14 03:13:25 -0400 |
commit | 15d46d75c67faa64425e1013957617239a9f4790 (patch) | |
tree | f3c1ce4ec2b5633bcd9c5a2885c72cb41b89f62e | |
parent | 773075e9dd7f0b29d00eee72bdeac5510d340b3a (diff) |
nullBuilder accepts custom default action.
-rw-r--r-- | src/Wavefront.hs | 184 | ||||
-rw-r--r-- | test/bench.hs | 2 |
2 files changed, 92 insertions, 94 deletions
diff --git a/src/Wavefront.hs b/src/Wavefront.hs index 6200bf2..c5c8d1b 100644 --- a/src/Wavefront.hs +++ b/src/Wavefront.hs | |||
@@ -58,52 +58,52 @@ data ObjBuilder m = ObjBuilder | |||
58 | , badToken :: L.ByteString -> m () | 58 | , badToken :: L.ByteString -> m () |
59 | } | 59 | } |
60 | 60 | ||
61 | nullBuilder :: Applicative m => ObjBuilder m | 61 | nullBuilder :: Applicative m => m () -> ObjBuilder m |
62 | nullBuilder = ObjBuilder | 62 | nullBuilder def = ObjBuilder |
63 | { vertex = \vs -> pure () | 63 | { vertex = \vs -> def |
64 | , vertexT = \vs -> pure () | 64 | , vertexT = \vs -> def |
65 | , vertexN = \vs -> pure () | 65 | , vertexN = \vs -> def |
66 | , vertexP = \vs -> pure () | 66 | , vertexP = \vs -> def |
67 | , face = \is -> pure () | 67 | , face = \is -> def |
68 | , cstype = \isRat typ -> pure () | 68 | , cstype = \isRat typ -> def |
69 | , curv2 = \is -> pure () | 69 | , curv2 = \is -> def |
70 | , curv = \u0 v0 is -> pure () | 70 | , curv = \u0 v0 is -> def |
71 | , parm = \uv is -> pure () | 71 | , parm = \uv is -> def |
72 | , specialPoints = \is -> pure () | 72 | , specialPoints = \is -> def |
73 | , endFreeForm = pure () | 73 | , endFreeForm = def |
74 | , ctech = \approx -> pure () | 74 | , ctech = \approx -> def |
75 | , stech = \approx -> pure () | 75 | , stech = \approx -> def |
76 | , deg = \is -> pure () | 76 | , deg = \is -> def |
77 | , surf = \u0 u1 v0 v1 ts -> pure () | 77 | , surf = \u0 u1 v0 v1 ts -> def |
78 | , trim = \ss -> pure () | 78 | , trim = \ss -> def |
79 | , hole = \ss -> pure () | 79 | , hole = \ss -> def |
80 | , specialCurves = \ss -> pure () | 80 | , specialCurves = \ss -> def |
81 | , equivalentCurves = \ccs -> pure () | 81 | , equivalentCurves = \ccs -> def |
82 | , groups = \gs -> pure () | 82 | , groups = \gs -> def |
83 | , smoothingGroup = \sg -> pure () | 83 | , smoothingGroup = \sg -> def |
84 | , mergingGroup = \mg δ -> pure () | 84 | , mergingGroup = \mg δ -> def |
85 | , usemtl = \mtl -> pure () | 85 | , usemtl = \mtl -> def |
86 | , deprecated_cdc = \is -> pure () | 86 | , deprecated_cdc = \is -> def |
87 | , deprecated_cdp = \is -> pure () | 87 | , deprecated_cdp = \is -> def |
88 | , deprecated_bzp = \is -> pure () | 88 | , deprecated_bzp = \is -> def |
89 | , deprecated_bsp = \is -> pure () | 89 | , deprecated_bsp = \is -> def |
90 | , mtllib = \fns -> pure () | 90 | , mtllib = \fns -> def |
91 | , objectName = \obn -> pure () | 91 | , objectName = \obn -> def |
92 | , bmat = \uv fs -> pure () | 92 | , bmat = \uv fs -> def |
93 | , step = \is -> pure () | 93 | , step = \is -> def |
94 | , points = \is -> pure () | 94 | , points = \is -> def |
95 | , usemap = \map -> pure () | 95 | , usemap = \map -> def |
96 | , maplib = \fns -> pure () | 96 | , maplib = \fns -> def |
97 | , c_interp = \b -> pure () | 97 | , c_interp = \b -> def |
98 | , d_interp = \b -> pure () | 98 | , d_interp = \b -> def |
99 | , trace_obj = \obj -> pure () | 99 | , trace_obj = \obj -> def |
100 | , shadow_obj = \obj -> pure () | 100 | , shadow_obj = \obj -> def |
101 | , deprecated_res = \is -> pure () | 101 | , deprecated_res = \is -> def |
102 | , bevel = \b -> pure () | 102 | , bevel = \b -> def |
103 | , lod = \lvl -> pure () | 103 | , lod = \lvl -> def |
104 | , call = \obj args -> pure () | 104 | , call = \obj args -> def |
105 | , command = \b cmd -> pure L.empty | 105 | , command = \b cmd -> def *> pure L.empty |
106 | , badToken = \bs -> pure () | 106 | , badToken = \bs -> def |
107 | } | 107 | } |
108 | 108 | ||
109 | 109 | ||
@@ -188,53 +188,51 @@ findNewLine ps o@(ObjConfig args) bs = case L.break (\c -> c=='\n' || c=='\\' || | |||
188 | else ds | 188 | else ds |
189 | Nothing -> (L.concat $ reverse $ ts : ps,L.empty) | 189 | Nothing -> (L.concat $ reverse $ ts : ps,L.empty) |
190 | 190 | ||
191 | {- | 191 | -- The 43 keywords of the OBJ file format: |
192 | 192 | -- | |
193 | 1 bevel | 193 | -- 1 bevel |
194 | 2 bmat | 194 | -- 2 bmat |
195 | 3 bsp | 195 | -- 3 bsp |
196 | 4 bzp | 196 | -- 4 bzp |
197 | 5 call | 197 | -- 5 call |
198 | 6 cdc | 198 | -- 6 cdc |
199 | 7 cdp | 199 | -- 7 cdp |
200 | 8 c_interp | 200 | -- 8 c_interp |
201 | 9 con | 201 | -- 9 con |
202 | 10 csh -- for all except these, | 202 | -- 10 csh |
203 | 11 cstype -- Two chars suffice to distinguish | 203 | -- 11 cstype |
204 | 12 ctech | 204 | -- 12 ctech |
205 | 13 curv2 -- for all except these, | 205 | -- 13 curv2 |
206 | 14 curv -- Two chars suffice to distinguish | 206 | -- 14 curv |
207 | 15 deg | 207 | -- 15 deg |
208 | 16 d_interp | 208 | -- 16 d_interp |
209 | 17 end | 209 | -- 17 end |
210 | 18 f | 210 | -- 18 f |
211 | 19 g | 211 | -- 19 g |
212 | 20 hole | 212 | -- 20 hole |
213 | 21 lod | 213 | -- 21 lod |
214 | 22 maplib | 214 | -- 22 maplib |
215 | 23 mg | 215 | -- 23 mg |
216 | 24 mtllib | 216 | -- 24 mtllib |
217 | 25 o | 217 | -- 25 o |
218 | 26 p | 218 | -- 26 p |
219 | 27 parm | 219 | -- 27 parm |
220 | 28 res | 220 | -- 28 res |
221 | 29 s | 221 | -- 29 s |
222 | 30 scrv | 222 | -- 30 scrv |
223 | 31 shadow_obj | 223 | -- 31 shadow_obj |
224 | 32 sp | 224 | -- 32 sp |
225 | 33 stech -- for all except these, | 225 | -- 33 stech |
226 | 34 step -- Two chars suffice to distinguish | 226 | -- 34 step |
227 | 35 surf | 227 | -- 35 surf |
228 | 36 trace_obj -- for all except these, | 228 | -- 36 trace_obj |
229 | 37 trim -- Two chars suffice to distinguish | 229 | -- 37 trim |
230 | 38 usemap -- for all except these, | 230 | -- 38 usemap |
231 | 39 usemtl -- Two chars suffice to distinguish | 231 | -- 39 usemtl |
232 | 40 v | 232 | -- 40 v |
233 | 41 vn | 233 | -- 41 vn |
234 | 42 vp | 234 | -- 42 vp |
235 | 43 vt | 235 | -- 43 vt |
236 | |||
237 | -} | ||
238 | 236 | ||
239 | nextToken :: (L.ByteString -> L.ByteString) -> L.ByteString -> L.ByteString | 237 | nextToken :: (L.ByteString -> L.ByteString) -> L.ByteString -> L.ByteString |
240 | nextToken tok bs = tok $ L.dropWhile (not . isSpace) bs | 238 | nextToken tok bs = tok $ L.dropWhile (not . isSpace) bs |
diff --git a/test/bench.hs b/test/bench.hs index 3125ed9..bf60303 100644 --- a/test/bench.hs +++ b/test/bench.hs | |||
@@ -59,7 +59,7 @@ countVerticesSundqvist ts = List.length vs | |||
59 | countVerticesCrayne :: L.ByteString -> Int | 59 | countVerticesCrayne :: L.ByteString -> Int |
60 | countVerticesCrayne bs = execState (parseOBJ builder (ObjConfig IntMap.empty) bs) 0 | 60 | countVerticesCrayne bs = execState (parseOBJ builder (ObjConfig IntMap.empty) bs) 0 |
61 | where | 61 | where |
62 | builder = nullBuilder | 62 | builder = (nullBuilder $ return ()) |
63 | { vertex = \_ -> modify succ | 63 | { vertex = \_ -> modify succ |
64 | } | 64 | } |
65 | 65 | ||