range stuff

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Tue Feb 17 06:26:16 PST 2009


Michel Fortin wrote:
> On 2009-02-16 20:21:00 -0500, superdan <super at dan.org> said:
> 
>> a'ight i've read all range stuff n ruminated on it for a while. yer 
>> ranges suck goat balls. something's amiss.
>>
>> yer have ranges that generate stuff.  some even ferever. then yer have 
>> ranges that eat stuff output ranges that is. but there's no range that 
>> has both input and output. some sort of filter ranges. yer should 
>> connect stuff together to get chains n stuff. see? i'm sayin': why 
>> would ya have a piehole & an asshole if yer don't have a stomach.
>>
>> i/o ranges are a missing link. if yer smart u can unify range stuff 
>> and stream stuff together. then stream or range it's all the same. not 
>> sure its possible but if it is only yer can pull it. that would be 
>> dogs bollocks.
> 
> Interesting. In fact I started a prototype of some kind of filter range 
> for tokenizing XML: takes characters and gives tokens. That said, what 
> you get is an input range (you can read tokens) that you build from an 
> other input range (character range). So while it may fit the definition 
> of a filter range, it may not be what you're thinking about.
> 
> What you want, an output range linked to an input range makes me think 
> of the XmlEventReaderToWriter class in BerkelyDB XML, although in 
> reverse (writer to reader) since ranges aren't pushing events, but 
> pulling data when requested.
> <http://www.oracle.com/technology/documentation/berkeley-db/xml/api_cxx/frame.html> 
> 
> 

I think filtering ranges are a great idea. Some were already present 
without a formal interface, e.g. map has an input and an output. All I 
need is to define a common interface for connecting a range to another. 
To that end, I will proclaim that if a range has the primitive

setInput(SomeRange input)

then it is a filtering range. This will be very useful for e.g. 
transcoding (we'll need at some point to rewrite std.encoding): a 
newly-defined character type SomeChar must define a filtering range that 
eats ranges of SomeChar and outputs dchar, and also a filtering range 
that eats dchar and produces SomeChar. Then that filter can be used to 
transfer characters across strings but also any combination of ranges 
including files.


Andrei



More information about the Digitalmars-d mailing list