Hi.  To describe my background really quickly, I'm a CS student with experience 
mostly in Java and Python.  (I've done some C++ work, but not a lot.)
Basically, I have two really newbish questions that I haven't been able to 
figure out from the library and language references, and I'm sure the answers
are perfectly obvious, so apologies in advance.

I'm writing a few collections classes in D (just to get the feel for the 
language; I realize that there are probably much better implementations 
available
from the dsource community, or w/e) and right now, I'm writing a linked list 
template class.  ( 'linkedList(E)' )

First question:  toString().  is this handled exactly the way that it is in 
Java?  I've written a toString method for my class, I'll post it below.  I can
call this method, and it works perfectly, if called specifically.

linkedList!(int) list = new linkedList!(int)();
writeln(list.toString());  //this works perfectly (if I add elements to the 
list, the results are the same)

writeln(list);  //this fails(at compile time) with a godawfully long error:

"/usr/local/include/d/phobos2/std/format.d(1455): Error: template 
std.format.formatValue(Writer,T,Char) if (is(const(T) == const(void[])))
formatValue(Writer,T,Char) if (is(const(T) == const(void[]))) matches more than 
one template declaration,
/usr/local/include/d/phobos2/std/format.d(1126):formatValue(Writer,T,Char) if 
(isInputRange!(T) && !isSomeChar!(ElementType!(T))) and
/usr/local/include/d/phobos2/std/format.d(1297):formatValue(Writer,T,Char) if 
(is(T == class))"

Anyway, my toString method is as follows:

public string toString(){


        if (head !is null){
            char[] outString = "[".dup;
            llNode cursor = head;  //llNode is a private node class
            while(cursor.next !is  null){
                outString = outString ~ text(cursor.datum) ~", ";
                cursor = cursor.next;
            }
            outString = outString ~ text(cursor.datum) ~ "]";
            return outString.idup;
        }
        else{
            return "[]";
        }


    }

I guess that I'm asking if write() calls an object's toString method, or if 
there's some other behavior going on that I'm ignorant of.


Question 2:

This is more a broad request for clarification, than a specific question.  I'm 
trying to understand the range interfaces.  I'm trying to make this
linkedList class implement the InputRange interface (among others).  I'm pretty 
sure that I've got opApply, opIndex, and opSlice figured out, but I can't
for the life of me figure out exactly what front(), popFront(), and empty() are 
supposed to be doing.  (I realize that the opX functions aren't part of the
InputRange interface.)  Is popFront supposed to delete the actual front element 
from the list?  Or is it supposed to represent some kind of internal
pointer that is there solely for the purpose of range functionality?  If the 
latter, how should the pointer get reset after it has gotten to the end once?
Should the pointer even need to be reset, or is popFront supposed to only cycle 
through once during the entire lifetime of the range object?

I really have tried to answer this question for myself, but I guess that I need 
more experience to actually be able to understand all of the documentation
the way that it is currently written.  Also, I've attached the d source files 
in question. One is the linkedList class, one is the test executable that I'm
trying to test it with.  linkedList.d should be in a directory mwcollections 
(since i'm trying to set up mwcollections as a module).  I'd have just sent an
archive file with this directory structure already in place, but I wouldn't 
want anyone to think that I was slipping them a virus.  :)  (though 4KB is a
little small to be a virus.)  Feel free to crack jokes at my poor coding style, 
I'm not really much more than an amateur at this.  I don't know if this is
relevant or not, but I'm using the digitalmars dmd compiler version 2.050, on a 
gentoo linux system.

Thanks in advance.

Mike W
begin 644 testlist.d
M:6UP;W)T('-T9"YS=&1I;SL*:6UP;W)T('-T9"YR86YG93L*:6UP;W)T(&UW
M8V]L;&5C=&EO;G,N;&EN:V5D3&ES=#L*"G9O:60@;6%I;BAS=')I;F=;72!A
M<F=S*7L*"B`@(`H@("`@;&EN:V5D3&ES="$H:6YT*2!L:7-T(#T@;F5W(&QI
M;FME9$QI<W0A*&EN="DH*3L*("`@(&QI<W0N<'5T*#$I.PH@("`@;&ES="YP
M=70H,BD["B`@("!L:7-T+G!U="@S*3L*("`@(`H@("`@:6YT6S-=('D@/2!;
M-"p...@-2p@-ET["B`@("!L:7-T+G!U="AY*3L*("`@(`H@("`...@+rh*("`@(&9O
M<f5...@h:6YT(&L[>"E[("`O+VIU<w...@=&\...@9&5M;VYS=')A=&4...@=&AA="!O
M<$%P<&QY(&ES('=O<FMI;F<N"B`@("`@("`...@=w)I=&5L;BAK*3L*("`@('T*
M("`@("HO"B`@("`*("`@('=R:71E;&XH;&ES="YT;U-T<fe...@i*3l@("`O
M+V-O;7!I;&5S"B`@("\O('=R:71E;&XH;&ES="D[("`@("`@("`@("`@("`O
7+V1O97-N)w...@8v]m<&EL90H@("`*?0H`
`
end
begin 644 linkedList.d
M;6]D=6QE(&UW8V]L;&5C=&EO;G,N;&EN:V5D3&ES=#L*"FEM<&]R="!S=&0N
M<W1D:6\["FEM<&]R="!S=&0N<F%N9V4["FEM<&]R="!S=&0N8V]N=CL*"G!U
M8FQI8R!C;&%S<R!L:6YK961,:7-T*$4I(#...@26yp=71286yg92$h12e["B`@
M("`*("`@("\O<')I=F%T92!N;V1E(&-l87...@h@("`@"B`@("!P<FEV871E
M(&-L87-S(&QL3F]D92!["B`@("`@("`@"B`@("`@("`@<'5B;&EC($...@9&%T
M=6T["B`@("`@("`@"B`@("`@("`@<'5B;&EC(&QL3F]D92!N97AT.PH@("`@
M("`@(`H@("`@("`@('!U8FQI8R!L;$YO9&4@<')E=FEO=7,["B`@("`@("`@
M"B`@("`@("`@<'5B;&EC('1H:7,H12!?9&%T=6TL(&QL3F]D92!?;F5X="P@
M;&Q.;V1E(%]P<F5V:6]U<RE["B`@("`@("`@("`@(`H@("`@("`@("`@("!D
M871U;2`](%]D871U;3L*("`@("`@("`@("`@"B`@("`@("`@("`@(&YE>'0@
M/2!?;F5X=#L*("`@("`@("`@("`@"B`@("`@("`@("`@('!R979I;W5S(#T@
M7W!R979I;W5S.PH@("`@("`@("`@("`*("`@("`@("!]"B`@("`@("`@"B`@
M("!]"B`@("`*("`@("\O:6YT97)n...@=f%r<PH@("`@"B`@("!L;$YO9&4@
M:&5A9#L*("`@(`H@("`@;&Q.;V1E('1A:6P["B`@("`*("`@('5I;G0@<VEZ
M93L*("`@(`H@("`@;&Q.;V1E(&-U<G)E;G0["B`@("`*("`@(`H@("`@"B`@
M("`O+V-O;G-T<G5C=&]R"B`@("`*("`@('!U8FQI8R!T:&ES*"E["B`@("`@
M("`@"B`@("`@("`@<VEZ92`](#`["B`@("`@("`@"B`@("`@("`@:&5A9"`]
M(&YU;&P["B`@("`@("`@"B`@("`@("`...@=&%I;"`](&YU;&P["B`@("`@("`@
M"B`@("`@("!C=7)R96YT(#T@:&5A9#L*("`@("`@("`*("`@('T*("`@(`H@
M("`@"B`@("`O+W!U8FQI8R!M96UB97(@9G5N8W1I;VYS"B`@("`*("`@('9O
M:60@<'5t...@7ven<'5T*7L*("`@("`@("`*("`@("`@("!I9BAH96%D(&ES
M(&YU;&PI>PH@("`@("`@("`@("!H96%D(#T@;F5W(&QL3F]D92A?:6YP=70L
M(&YU;&PL(&YU;&PI.PH@("`@("`@("`@("!S:7IE*RL["B`@("`@("`@("`@
M('1A:6P@/2!H96%D.PH@("`@("`@("`@("!C=7)R96YT(#T@:&5A9#L*("`@
M("`@("`@("`@"B`@("`@("`...@?0h@("`@("`@(`H@("`@("`@(&5L<V5["B`@
M("`@("`@("`@(`H@("`@("`@("`@("!T86EL+FYE>'0@/2!N97<@;&Q.;V1E
M*%]I;G!U="P@;G5L;"p...@=&%I;"D["B`@("`@("`@("`@(`H@("`@("`@("`@
M("!T86EL(#...@=&%I;"YN97AT.PH@("`@("`@("`@("`*("`@("`@("`@("`@
M<VEZ92LK.PH@("`@("`@("`@("`*("`@("`@("!]"B`@("`@("`@"B`@("!]
M"B`@("`*("`@('!U8FQI8R!V;VED('!U="a%...@7ven<'5T*7L*("`@("`@
M("`*("`@("`@("!F;W)E86-H*$4@:s...@7ven<'5T*7L*("`@("`@("`@("`@
M<'5T*&LI.PH@("`@("`@('T*("`@("`@("`*("`@('T*("`@(`H@("`@<'5B
M;&EC($...@9g)O;G0H*2!["B`@("`@("`@<F5T=7)N(&-U<G)E;G0N9&%T=6T[
M"B`@("!]"B`@("`*("`@('!U8FQI8R!%(&UO=F5&<F]N="@I('L@<F5T=7)N
M(&AE860N9&%T=6T[?0H@("`@"B`@("!P=6)L:6,@=F]I9"!P;W!&<F]N="@I
M('L*("`@("`@("!C=7)R96YT(#...@8w5r<F5N="YN97AT.PH@("`...@?3l*("`@
M(`H@("`@<'5B;&EC(&)O;v...@96up='DH*2![(`H@("`@("`@("`@("!I9B`H
M8W5R<F5N="!I<R!N=6QL*7L*("`@("`@("`@("`@("`@(')E='5R;B!T<G5E
M.PH@("`@("`@("`@("!]"B`@("`@("`@("`@(&5L<V5["B`@("`@("`@("`@
M("`@("!R971U<f...@9f%l<V4["B`@("`@("`@("`@('T*("`@('T*("`@(`H@
M("`@<'5B;&EC(&EN="!O<$%P<&QY*&EN="!d96qe9v%t92ar...@12d@9&<I
M>R`*("`@("`@("`*("`@("`@("!I;G0@<F5S=6QT(#T@,#L*("`@("`@("!L
M;$YO9&4...@8w5r<V]R(#T@:&5A9#L*("`@("`@("!W:&EL92AC=7)S;W(@(6ES
M(&YU;&PI>PH@("`@("`@("`@("!R97-U;'0@/2!D9RAC=7)S;W(N9&%T=6TI
M.PH@("`@("`@("`@("!I9BAR97-U;'0@(3T@,"E["B`@("`@("`@("`@("`@
M("!B<F5A:SL*("`@("`@("`@("`...@?0h@("`@("`@("`@("!C=7)S;W(]8W5R
M<V]R+FYE>'0["B`@("`@("`...@?2`*("`@("`@(')E='5R;B!R97-U;'0["B`@
M("!]"B`@("`*("`@('!U8FQI8R!I;G0@;W!!<'!L>2AI;g...@9&5L96=A=&4H
M<F5F('-I>F5?="P@<F5F($4I(&1G*7L@"B`@("`@("`@:6YT(')E<W5L="`]
M(#`["B`@("`@("`@;&Q.;V1E(&-U<G-O<B`](&AE860["B`@("`@("`...@=6en
M="!C=7));F1E>"`](#`["B`@("`@("`...@=vai;&4H8W5R<V]R("%I<R!N=6QL
M*7L*("`@("`@("`@("`@<F5S=6QT(#...@9&<h8w5r26y...@l(&-U<G-O<BYD
M871U;2D["B`@("`@("`@("`@(&EF*')E<W5L="`A/2`P*7L*("`@("`@("`@
M("`@("`@(&)R96%K.PH@("`@("`@("`@("!]"B`@("`@("`@("`@(&-U<G-O
M<CUC=7)S;W(N;F5X=#L*("`@("`@("`@("`...@8w5r26yd97@K*SL*("`@("`@
M("!]"B`@("`@("!R971U<FX@<F5S=6QT.PH@("`...@?0h@("`@"B`@("`*("`@
M(`H@("`@<'5B;&EC($4@;W!);F1E>"AS:7ie...@7ven9&5X*7L*"B`@("`@
M("`@:6...@*%]i;F1E>"`\('-I>F4@)b...@7ven9&5X(#X](#`I>PH@("`@("`@
M("`@("`*("`@("`@("`@("`@;&Q.;V1E(&-U<G-O<CL*("`@("`@("`@("`@
M:6YT(&-U<DEN9&5X.PH@("`@("`@("`@("`*("`@("`@("`@("`@:6...@*%]i
M;F1E>"`\('-I>F4O,BE["B`@("`@("`@("`@("`@("`*("`@("`@("`@("`@
M("`@(&-U<G-O<B`](&AE860["B`@("`@("`@("`@("`@("!C=7));F1E>"`]
M(#`["B`@("`@("`@("`@("`@("!W:&EL92AC=7));F1E>"`A/2!?:6y...@i
M>PH@("`@("`@("`@("`@("`@("`@(&-U<G-O<B`](&-U<G-O<BYN97AT.PH@
M("`@("`@("`@("`@("`@("`@(&-U<DEN9&5X*RL["B`@("`@("`@("`@("`@
M("!]"B`@("`@("`@("`@("`@("!R971U<f...@8w5r<V]R+F1A='5M.PH@("`@
M("`@("`@("!]"B`@("`@("`@("`@(&5L<V5["B`@("`@("`@("`@("`@("!C
M=7)S;W(@/2!T86EL.PH@("`@("`@("`@("`@("`...@8w5r26yd97@@/2!S:7IE
M+3$["B`@("`@("`@("`@("`@("!W:&EL92AC=7));F1E>"`A/2!?:6y...@i
M>PH@("`@("`@("`@("`@("`@("`@(&-U<G-O<B`](&-U<G-O<BYP<F5V:6]U
M<SL*("`@("`@("`@("`@("`@("`@("!C=7));F1E>"TM.PH@("`@("`@("`@
M("`@("`...@?0h@("`@("`@("`@("`@("`@<F5T=7)N(&-U<G-O<BYD871U;3L*
M("`@("`@("`@("`...@?0h@("`@("`@('T*("`@("`@("!E;'-E>PH@("`@("`@
M("`@("!T:')O=R!N97<@17AC97!T:6]N*"));F1E>"!O=70@;v...@8f]u;F1S
M+B(I.PH@("`@("`@('T*("`@("`@("`*("`@('T*("`@(`H@("`@<'5B;&EC
M(&QI;FME9$QI<W0A*$4I(&]P4VQI8V4H*7L*("`@("`@("!L:6YK961,:7-T
M(2A%*2!T96UP(#T@;F5W(&QI;FME9$QI<W0A*$4I*"D["B`@("`@("`@;&Q.
M;V1E(&-U<G-O<B`](&AE860["B`@("`@("`...@=vai;&4H8W5R<V]R("%I<R!N
M=6QL*7L*("`@("`@("`@("`...@=&5M<"YP=70H8W5R<V]R+F1A='5M*3L*("`@
M("`@("`@("`...@8w5r<V]R(#...@8w5r<V]R+FYE>'0["B`@("`@("`...@?0h@("`@
M("`@(')E='5R;B!T96UP.PH@("`...@?0h@("`@"B`@("!P=6)L:6,@;&EN:V5D
M3&ES="$H12D@;W!3;&EC92AS:7IE7W0@;&]W+"!S:7IE7W0@:&EG:"E["B`@
M("`@("`@"B`@("`@("`@:68H;&]W(#X@<VEZ92TQ('Q\(&AI9V@@/B!S:7IE
m...@?'P@;&]W(#X@:&EG:"E["B`@("`@("`@("`@('1H<F]W(&YE=R!%>&-E
M<'1I;VXH(DEN9&5X*&5S*2!O=70@;v...@8f]u;F1S+B(I.PH@("`@("`@('T*
M("`@("`@("!E;'-E>PH@("`@("`@("`@("!L:6YK961,:7-T(2A%*2!T96UP
M(#T@;F5W(&QI;FME9$QI<W0A*$4I*"D["B`@("`@("`@("`@(&QL3F]D92!C
M=7)S;W(@/2!H96%D.PH@("`@("`@("`@("!I;g...@8w5r26yd97@@/2`P.PH@
M("`@("`@("`@("!W:&EL92AC=7));F1E>#QL;W<I>PH@("`@("`@("`@("`@
M("`...@8w5r26yd97@K*SL*("`@("`@("`@("`@("`@(&-U<G-O<B`](&AE860N
M;F5X=#L*("`@("`@("`@("`...@?0h@("`@("`@("`@("!W:&EL92AC=7));F1E
M>"`\/2!H:6=H*7L*("`@("`@("`@("`@("`@('1E;7`N<'5T*&-U<G-O<BYD
M871U;2D["B`@("`@("`@("`@("`@("!C=7)S;W(@/2!C=7)S;W(N;F5X=#L*
M("`@("`@("`@("`@("`@(&-U<DEN9&5X*RL["B`@("`@("`@("`@('T*("`@
M("`@("`@("`@<F5T=7)N('1E;7`["B`@("`@("`...@?0h@("`@("`@(`H@("`@
M?0H@("`@"B`@("!P=6)L:6,@<W1R:6YG('1O4W1R:6YG*"E["B`@("`@("`@
M"B`@("`@("`@"B`@("`@("`@:6...@*&AE860@(6ES(&YU;&PI>PH@("`@("`@
M("`@("!C:&%R6UT@;W5T4W1R:6YG(#T@(ELB+F1U<#L*("`@("`@("`@("`@
M;&Q.;V1E(&-U<G-O<B`](&AE860[("`O+VQL3F]D92!I<R!A('!R:79A=&4@
M;F]D92!C;&%S<PH@("`@("`@("`@("!W:&EL92AC=7)S;W(N;F5X="`A:7,@
M(&YU;&PI>PH@("`@("`@("`@("`@("`@;W5T4W1R:6YG(#T@;W5T4W1R:6YG
M('x...@=&5X="AC=7)S;W(N9&%T=6TI('XB+"`B.PH@("`@("`@("`@("`@("`@
M8W5R<V]R(#...@8w5r<V]R+FYE>'0["B`@("`@("`@("`@('T*("`@("`@("`@
M("`@;W5T4W1R:6YG(#T@;W5T4W1R:6YG('x...@=&5X="AC=7)S;W(N9&%T=6TI
M('X@(ETB.PH@("`@("`@("`@("!R971U<FX@;W5T4W1R:6YG+FED=7`["B`@
M("`@("`...@?0h@("`@("`@(&5L<V5["B`@("`@("`@("`@(')E='5R;B`B6UTB
M.PH@("`@("`@('T*("`@("`@("`*("`@("`@("`*("`@('T*("`@(`H@("`@
."B`@("`*"B`@("`*?0H`
`
end

Reply via email to