Thread overview | ||||||
---|---|---|---|---|---|---|
|
March 04, 2014 proposal: OOP wrapper for ranges for easy interfacing | ||||
---|---|---|---|---|
| ||||
Attachments:
| Interfacing with ranges across libraries can be tricky due to heavy use of templates. Example cases are when interfacing between D and C++ or when using D shared libraries, that we would like to distribute with di interface files. I'd like to have something like the following in phobos (see code below). The code makes an OOP wrapper for ranges, allowing one to use separate compilation model without having to pull in all the source code if we want to use the library with arbitrary ranges of a given element type (see unittest below). This could also greatly benefit compilation time since it enables us to use thin di interface files. ---- module util.oop; import std.range; interface InputRange(T){ void popFront(); T front(); bool empty(); typeof(this) save(); //should actually have a whole OOP hierarchy to support the various range paradigms, with assert(0) when un-implemented } //TODO:more generic, eg: to!InputRange auto toInputRange(R)(R a)if(isInputRange!R){ alias T=ElementType!R; class A:InputRange!T{ R a; this(R a){ this.a=a; } void popFront(){a.popFront;} T front(){return a.front;} bool empty(){return a.empty;} A save(){return new A(a);} } return new A(a); } unittest{ auto fun(InputRange!int a){//fun is *not* templated; works with any input range whose element type is int. return a.array; } import std.algorithm:equal; assert(fun(10.iota.map!(a=>a*2).toInputRange).equal(iota(0,20,2))); } |
March 04, 2014 Re: proposal: OOP wrapper for ranges for easy interfacing | ||||
---|---|---|---|---|
| ||||
Posted in reply to Timothee Cour | see std.range.inputRangeObject and the associated interfaces http://dlang.org/phobos/std_range.html#InputRange it is templated on only the element type |
March 04, 2014 Re: proposal: OOP wrapper for ranges for easy interfacing | ||||
---|---|---|---|---|
| ||||
Posted in reply to Timothee Cour | On Tuesday, 4 March 2014 at 04:59:12 UTC, Timothee Cour wrote: > Interfacing with ranges across libraries can be tricky due to heavy use of > templates. Example cases are when interfacing between D and C++ or when > using D shared libraries, that we would like to distribute with di > interface files. > > I'd like to have something like the following in phobos (see code below). > The code makes an OOP wrapper for ranges, allowing one to use separate > compilation model without having to pull in all the source code if we want > to use the library with arbitrary ranges of a given element type (see > unittest below). This could also greatly benefit compilation time since it > enables us to use thin di interface files. > Have you seen InputRange and inputRangeObject in std.range? http://dlang.org/phobos/std_range.html#.InputRange http://dlang.org/phobos/std_range.html#inputRangeObject |
March 04, 2014 Re: proposal: OOP wrapper for ranges for easy interfacing | ||||
---|---|---|---|---|
| ||||
Posted in reply to Brad Anderson Attachments:
| Ah, thanks I should've searched more, that's exactly what I wanted.
On Mon, Mar 3, 2014 at 9:02 PM, Brad Anderson <eco@gnuk.net> wrote:
> On Tuesday, 4 March 2014 at 04:59:12 UTC, Timothee Cour wrote:
>
>> Interfacing with ranges across libraries can be tricky due to heavy use of templates. Example cases are when interfacing between D and C++ or when using D shared libraries, that we would like to distribute with di interface files.
>>
>> I'd like to have something like the following in phobos (see code below). The code makes an OOP wrapper for ranges, allowing one to use separate compilation model without having to pull in all the source code if we want to use the library with arbitrary ranges of a given element type (see unittest below). This could also greatly benefit compilation time since it enables us to use thin di interface files.
>>
>>
> Have you seen InputRange and inputRangeObject in std.range?
>
> http://dlang.org/phobos/std_range.html#.InputRange http://dlang.org/phobos/std_range.html#inputRangeObject
>
|
Copyright © 1999-2021 by the D Language Foundation