aboutsummaryrefslogtreecommitdiff
path: root/src/ltn12.lua
diff options
context:
space:
mode:
authorDiego Nehab <diego@tecgraf.puc-rio.br>2004-11-27 07:58:04 +0000
committerDiego Nehab <diego@tecgraf.puc-rio.br>2004-11-27 07:58:04 +0000
commit7c97e8e40aaa665226fb54449773dc3134e755b2 (patch)
tree47888d4c924fc24bf3b355bf58120ea3cdc74bc4 /src/ltn12.lua
parenteb0fc857ddea6f084d338589e2a33d3e7d4eade6 (diff)
downloadluasocket-7c97e8e40aaa665226fb54449773dc3134e755b2.tar.gz
luasocket-7c97e8e40aaa665226fb54449773dc3134e755b2.tar.bz2
luasocket-7c97e8e40aaa665226fb54449773dc3134e755b2.zip
Almost ready for beta3
Diffstat (limited to 'src/ltn12.lua')
-rw-r--r--src/ltn12.lua22
1 files changed, 14 insertions, 8 deletions
diff --git a/src/ltn12.lua b/src/ltn12.lua
index ed39ec8..43c2755 100644
--- a/src/ltn12.lua
+++ b/src/ltn12.lua
@@ -8,7 +8,11 @@
8----------------------------------------------------------------------------- 8-----------------------------------------------------------------------------
9-- Declare module 9-- Declare module
10----------------------------------------------------------------------------- 10-----------------------------------------------------------------------------
11module("ltn12") 11local string = require("string")
12local table = require("table")
13local base = require("base")
14local coroutine = require("coroutine")
15local ltn12 = module("ltn12")
12 16
13filter = {} 17filter = {}
14source = {} 18source = {}
@@ -23,7 +27,7 @@ BLOCKSIZE = 2048
23----------------------------------------------------------------------------- 27-----------------------------------------------------------------------------
24-- returns a high level filter that cycles a low-level filter 28-- returns a high level filter that cycles a low-level filter
25function filter.cycle(low, ctx, extra) 29function filter.cycle(low, ctx, extra)
26 assert(low) 30 base.assert(low)
27 return function(chunk) 31 return function(chunk)
28 local ret 32 local ret
29 ret, ctx = low(ctx, chunk, extra) 33 ret, ctx = low(ctx, chunk, extra)
@@ -121,7 +125,7 @@ end
121 125
122-- turns a fancy source into a simple source 126-- turns a fancy source into a simple source
123function source.simplify(src) 127function source.simplify(src)
124 assert(src) 128 base.assert(src)
125 return function() 129 return function()
126 local chunk, err_or_new = src() 130 local chunk, err_or_new = src()
127 src = err_or_new or src 131 src = err_or_new or src
@@ -145,7 +149,7 @@ end
145 149
146-- creates rewindable source 150-- creates rewindable source
147function source.rewind(src) 151function source.rewind(src)
148 assert(src) 152 base.assert(src)
149 local t = {} 153 local t = {}
150 return function(chunk) 154 return function(chunk)
151 if not chunk then 155 if not chunk then
@@ -160,7 +164,7 @@ end
160 164
161-- chains a source with a filter 165-- chains a source with a filter
162function source.chain(src, f) 166function source.chain(src, f)
163 assert(src and f) 167 base.assert(src and f)
164 local co = coroutine.create(function() 168 local co = coroutine.create(function()
165 while true do 169 while true do
166 local chunk, err = src() 170 local chunk, err = src()
@@ -215,7 +219,7 @@ end
215 219
216-- turns a fancy sink into a simple sink 220-- turns a fancy sink into a simple sink
217function sink.simplify(snk) 221function sink.simplify(snk)
218 assert(snk) 222 base.assert(snk)
219 return function(chunk, err) 223 return function(chunk, err)
220 local ret, err_or_new = snk(chunk, err) 224 local ret, err_or_new = snk(chunk, err)
221 if not ret then return nil, err_or_new end 225 if not ret then return nil, err_or_new end
@@ -254,7 +258,7 @@ end
254 258
255-- chains a sink with a filter 259-- chains a sink with a filter
256function sink.chain(f, snk) 260function sink.chain(f, snk)
257 assert(f and snk) 261 base.assert(f and snk)
258 return function(chunk, err) 262 return function(chunk, err)
259 local filtered = f(chunk) 263 local filtered = f(chunk)
260 local done = chunk and "" 264 local done = chunk and ""
@@ -279,10 +283,12 @@ end
279 283
280-- pumps all data from a source to a sink, using a step function 284-- pumps all data from a source to a sink, using a step function
281function pump.all(src, snk, step) 285function pump.all(src, snk, step)
282 assert(src and snk) 286 base.assert(src and snk)
283 step = step or pump.step 287 step = step or pump.step
284 while true do 288 while true do
285 local ret, err = step(src, snk) 289 local ret, err = step(src, snk)
286 if not ret then return not err, err end 290 if not ret then return not err, err end
287 end 291 end
288end 292end
293
294base.setmetatable(ltn12, nil)