diff options
| author | Diego Nehab <diego@tecgraf.puc-rio.br> | 2004-11-27 07:58:04 +0000 |
|---|---|---|
| committer | Diego Nehab <diego@tecgraf.puc-rio.br> | 2004-11-27 07:58:04 +0000 |
| commit | 7c97e8e40aaa665226fb54449773dc3134e755b2 (patch) | |
| tree | 47888d4c924fc24bf3b355bf58120ea3cdc74bc4 /src/ltn12.lua | |
| parent | eb0fc857ddea6f084d338589e2a33d3e7d4eade6 (diff) | |
| download | luasocket-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.lua | 22 |
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 | ----------------------------------------------------------------------------- |
| 11 | module("ltn12") | 11 | local string = require("string") |
| 12 | local table = require("table") | ||
| 13 | local base = require("base") | ||
| 14 | local coroutine = require("coroutine") | ||
| 15 | local ltn12 = module("ltn12") | ||
| 12 | 16 | ||
| 13 | filter = {} | 17 | filter = {} |
| 14 | source = {} | 18 | source = {} |
| @@ -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 |
| 25 | function filter.cycle(low, ctx, extra) | 29 | function 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 |
| 123 | function source.simplify(src) | 127 | function 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 |
| 147 | function source.rewind(src) | 151 | function 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 |
| 162 | function source.chain(src, f) | 166 | function 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 |
| 217 | function sink.simplify(snk) | 221 | function 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 |
| 256 | function sink.chain(f, snk) | 260 | function 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 |
| 281 | function pump.all(src, snk, step) | 285 | function 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 |
| 288 | end | 292 | end |
| 293 | |||
| 294 | base.setmetatable(ltn12, nil) | ||
