From: "Florian Groß" Date: 2006-04-09T07:32:13+09:00 Subject: [ANN] Future::Enumerator: Ruby 1.9's enumerators backported to Ruby 1.8 --------------010107060406090604030006 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit Moin. I couldn't wait to try out the new enumerator returning no-block semantics of .each_with_index, .each_byte and so on so I backported it to Ruby 1.8. Nothing too spectacular. I've attached the (very small) library to this mail. I might release it on RubyForge as a Gem if there really is demand for that. Kind regards, Florian Gross -- http://flgr.0x42.net/ --------------010107060406090604030006 Content-Type: application/x-ruby; name="future-enumerator.rb" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="future-enumerator.rb" cmVxdWlyZSAnZW51bWVyYXRvcicNCg0KIyBUaGUgZnV0dXJlIGFsd2F5cyBhcnJpdmVzIHRv byBmYXN0Li4uIGFuZCBpbiB0aGUgd3Jvbmcgb3JkZXIuDQptb2R1bGUgRnV0dXJlOyBlbmQg IyA6bm9kb2M6DQoNCiMgTWFrZXMgbW9zdCBtZXRob2RzIHRoYXQgdXN1YWxseSB0YWtlIGJs b2NrcyBkbyB0aGUgc2FtZSB0aGluZw0KIyBhcyB0aGV5IHdpbGwgZG8gaW4gdGhlIGZ1dHVy ZTogUmV0dXJuIGFuIGVudW1lcmF0b3IgaWYgbm8gYmxvY2sNCiMgaXMgc3VwcGxpZWQgdG8g dGhlbS4gVGhpcyBpcyBuZWF0Og0KIw0KIyAgIGl0ZW1zID0gWyJwZXJsIiwgInB5dGhvbiIs ICJydWJ5Il0NCiMgICByZXN1bHQgPSBpdGVtcy5lYWNoX3dpdGhfaW5kZXguZmluZCBkbyB8 aXRlbSwgaW5kZXh8DQojICAgICBub3QgaXRlbS5pbmNsdWRlPygicCIpDQojICAgZW5kDQoj ICAgZm91bmRfaXRlbSwgZm91bmRfaW5kZXggPSAqcmVzdWx0DQojICAgZm91bmRfaXRlbSAj ID0+ICJydWJ5Ig0KIyAgIGZvdW5kX2luZGV4ICMgPT4gMg0KIw0KIyAgICJmb29iYXIiLmVh Y2hfYnl0ZS5tYXAgZG8gfGJ5dGV8DQojICAgICBieXRlLnN1Y2MuY2hyDQojICAgZW5kLmpv aW4gIyA9PiAiZ3BwY2JzIg0KIw0KIyAgIHN0ciA9ICgwIC4uIDE1KS5lYWNoX3dpdGhfaW5k ZXgubWFwIGRvIHxpdGVtLCBpbmRleHwNCiMgICAgICgiJTA0YiIgJSBpdGVtKS50cigiMDEi LCAiICMiKSArDQojICAgICAoaW5kZXggJSA0ID09IDMgPyAiXG4iIDogInwiKQ0KIyAgIGVu ZC5qb2luDQojICAgcHV0cyBzdHINCiMgICAjIG91dHB1dHM6DQojICAgIyAgICAgICB8ICAg I3wgICMgfCAgIyMNCiMgICAjICAgICMgIHwgIyAjfCAjIyB8ICMjIw0KIyAgICMgICAjICAg fCMgICN8IyAjIHwjICMjDQojICAgIyAgICMjICB8IyMgI3wjIyMgfCMjIyMNCm1vZHVsZSBG dXR1cmU6OkVudW1lcmF0b3INCiAgZXh0ZW5kIHNlbGYNCg0KICBPbGRNZXRob2RzID0ge30g dW5sZXNzIGRlZmluZWQ/KE9sZE1ldGhvZHMpICMgOm5vZG9jOg0KDQogIGRlZiBlbnVtZXJh dGlmeShtb2QsIG1ldGhvZCkNCiAgICBtZXRob2QgPSBtZXRob2QudG9fc3ltDQogICAga2V5 ID0gW21vZCwgbWV0aG9kXS5qb2luKCIjIikNCiAgICAjIFdlJ3JlIHN0aWxsIGluIDEuOC4g QmxvY2tzIGNhbid0IHRha2UgYmxvY2tzLg0KICAgICMgU28gd2UgbmVlZCB0byB1c2UgdGhl IHN0cmluZyBmb3JtIG9mIG1vZHVsZV9ldmFsLg0KICAgICMgSXQncyBzYWQgYW5kIGFsbG93 cyBmb3IgY29kZSBpbmplY3Rpb24gYnVncy4gOigNCiAgICByZXR1cm4gZmFsc2UgaWYgT2xk TWV0aG9kcy5pbmNsdWRlPyhrZXkpDQogICAgb2xkX21ldGhvZCA9IG1vZC5pbnN0YW5jZV9t ZXRob2QobWV0aG9kKQ0KICAgIG1vZC5tb2R1bGVfZXZhbCB7IHJlbW92ZV9tZXRob2QobWV0 aG9kKSB9DQogICAgbW9kLm1vZHVsZV9ldmFsKCUoDQogICAgICBkZWYgI3ttZXRob2R9KCph cmdzLCAmYmxvY2spDQogICAgICAgIGlmIGJsb2NrIHRoZW4NCiAgICAgICAgICBvbGQgPSBG dXR1cmU6OkVudW1lcmF0b3I6Ok9sZE1ldGhvZHNbI3trZXkuaW5zcGVjdH1dDQogICAgICAg ICAgb2xkLmJpbmQoc2VsZikuY2FsbCgqYXJncywgJmJsb2NrKQ0KICAgICAgICBlbHNlDQog ICAgICAgICAgZW51bV9mb3IoI3ttZXRob2QuaW5zcGVjdH0sICphcmdzKQ0KICAgICAgICBl bmQNCiAgICAgIGVuZA0KICAgICksIEZpbGUuam9pbihfX0ZJTEVfXywga2V5KSwgMCkNCiAg ICBPbGRNZXRob2RzW2tleV0gPSBvbGRfbWV0aG9kDQogICAgcmV0dXJuIHRydWUNCiAgZW5k DQogIHByaXZhdGUgOmVudW1lcmF0aWZ5DQoNCiAgZGVmIG1ldGEobW9kKQ0KICAgIGNsYXNz IDw8IG1vZDsgc2VsZjsgZW5kDQogIGVuZA0KICBwcml2YXRlIDptZXRhDQoNCg0KICAjIEEg bGlzdCBvZiBhbGwgbW9kdWxlcy9jbGFzc2VzIGFuZCB0aGVpciBtZXRob2RzIHdoaWNoIHdp bGwNCiAgIyByZXR1cm4gYW4gRW51bWVyYXRvciBpZiBubyBibG9jayBpcyBnaXZlbi4gVGhp cyBpcyBoYXJkIHRvDQogICMgcmVhZCBpbiB0aGUgUkRvYyBhbmQgSSBjYW4ndCBkbyBtdWNo IGFib3V0IGl0LCB1bmZvcnR1bmF0ZWx5Lg0KICBFbnVtZXJhdGlmeVJ1bGVzID0gew0KICAg IG1ldGEoQVJHRikgPT4gWzplYWNoLCA6ZWFjaF9ieXRlLCA6ZWFjaF9saW5lXSwNCg0KICAg IEFycmF5ID0+IFs6Y29sbGVjdCwgOmNvbGxlY3QhLCA6ZGVsZXRlX2lmLCA6ZWFjaCwgOmVh Y2hfaW5kZXgsDQogICAgICA6bWFwLCA6bWFwISwgOnJlamVjdCwgOnJlamVjdCEsIDpyZXZl cnNlX2VhY2gsIDpzZWxlY3RdLA0KDQogICAgbWV0YShEaXIpID0+IFs6Zm9yZWFjaF0sDQog ICAgRGlyID0+IFs6ZWFjaF0sDQoNCiAgICBFbnVtZXJhYmxlID0+IFs6Y29sbGVjdCwgOmRl dGVjdCwgOmVhY2hfd2l0aF9pbmRleCwgOmZpbmQsDQogICAgICA6ZmluZF9hbGwsIDptYXAs IDpwYXJ0aXRpb24sIDpyZWplY3QsIDpzZWxlY3QsIDpzb3J0X2J5XSwNCg0KICAgIG1ldGEo RU5WKSA9PiBbOmRlbGV0ZV9pZiwgOmVhY2gsIDplYWNoX2tleSwgOmVhY2hfcGFpciwNCiAg ICAgIDplYWNoX3ZhbHVlLCA6cmVqZWN0LCA6cmVqZWN0ISwgOnNlbGVjdF0sDQoNCiAgICBI YXNoID0+IFs6ZWFjaCwgOmVhY2hfa2V5LCA6ZWFjaF9wYWlyLCA6ZWFjaF92YWx1ZSwgOnJl amVjdCwNCiAgICAgIDpyZWplY3QhLCA6c2VsZWN0XSwNCg0KICAgIG1ldGEoSU8pID0+IFs6 Zm9yZWFjaF0sDQogICAgSU8gPT4gWzplYWNoLCA6ZWFjaF9ieXRlLCA6ZWFjaF9saW5lXSwN Cg0KICAgICMgTm90IGluIFJ1YnkgMS45ICh5ZXQ/KQ0KICAgICNJbnRlZ2VyID0+IFs6ZG93 bnRvLCA6dXB0b10sDQogICAgI051bWVyaWMgPT4gWzpzdGVwXSwNCg0KICAgIFJhbmdlID0+ IFs6ZWFjaCwgOnN0ZXBdLA0KDQogICAgU3RyaW5nID0+IFs6ZWFjaCwgOmVhY2hfYnl0ZSwg OmVhY2hfbGluZV0sDQoNCiAgICBTdHJ1Y3QgPT4gWzplYWNoLCA6ZWFjaF9wYWlyXSwNCiAg fQ0KDQoNCiAgaWYgUlVCWV9WRVJTSU9OIDwgIjEuOSIgdGhlbg0KICAgIEVudW1lcmF0aWZ5 UnVsZXMuZWFjaCBkbyB8bW9kLCBtZXRob2RzfA0KICAgICAgbWV0aG9kcy5lYWNoIGRvIHxt ZXRob2R8DQogICAgICAgIGVudW1lcmF0aWZ5KG1vZCwgbWV0aG9kKQ0KICAgICAgZW5kDQog ICAgZW5kDQogIGVuZA0KZW5kDQo= --------------010107060406090604030006--