D - [BUG] yet another interface related issue
- Kris (116/116) Apr 06 2004 I'm sure many of you are sick to death of hearing about Interface relate...
- Ivan Senji (39/155) Apr 07 2004 I'm not shure that i know exactly what the problem is,but can you not do
- Kris (34/39) Apr 07 2004 Yes, one could use an upcast inside the next() method (that's just what ...
- Ben Hinkle (10/34) Apr 07 2004 Were you expecting the
- Kris (15/53) Apr 07 2004 Having to perform an upcast for such a trivial design is, in my opinion,...
- Ant (7/13) Apr 07 2004 Walter tends to say things only once.
- Kris (6/21) Apr 07 2004 Thanks, Antonio.
- C (10/38) Apr 07 2004 Yea hes notoriously non-commital , but the changes usually find there wa...
-
Phill
(16/44)
Apr 08 2004
"C"
wrote in message news:opr53xjdptehmtou@localhost.... - John Reimer (10/21) Apr 08 2004 You know what? That just sounds wrong. If Walter is conversing through
- Ben Hinkle (32/32) Apr 07 2004 About the whole upcasting thing...
-
John Reimer
(12/15)
Apr 07 2004
- Kris (12/30) Apr 07 2004 Ben's suggestion is certainly fair. There are other vaguely similar
- John Reimer (7/25) Apr 07 2004 Well, I figured that none of these solutions could be absolutely
- Kris (31/63) Apr 07 2004 On the face of it, that really doesn't seem so bad. It's when you dig a ...
- Russ Lewis (8/23) Apr 08 2004 It's pretty rare when Walter actually ignores us. But he often lurks,
- Kris (7/15) Apr 09 2004 You are, of course, absolutely right Ben.
- C (20/153) Apr 07 2004 Patience. All good things take time. You've made a good case and I thi...
- Walter (3/3) Apr 07 2004 Just to be sure, could you please post a complete example that illustrat...
I'm sure many of you are sick to death of hearing about Interface related flaws and bugs: personally, I'm thoroughly fed up of running into them. This one is another doozy ... OK; so we have a extensible Tokenizer subsystem. It scans input for delimited content and places the results in a Token. Here's a stripped-down version of the participants: class Token { private char[] value; void setValue (char[] value) { this.value = value; } } class Tokenizer { abstract bool next (Token token); // other base-class stuff here } class LineTokenizer : Tokenizer { bool next (Token token) { // do some stuff // set Token content token.setValue (....); } } There are a variety of Tokenizer derivatives that handle different scanning flavours. We can specialize with a SpaceTokenizer, CommaTokenizer, RegexTokenizer, and so on. They all operate upon the basic Token class. Now, we wish to introduce a *slightly* more sophisticated Token derivative called CookieToken: class CookieToken : Token { private char[] name; void setName (char[] name) { this.name = name; } } ... and we want to pass it to a CookieTokenizer: class CookieTokenizer : Tokenizer { bool next (CookieToken token) { // do some stuff // set Token content token.setValue (....); token.setName (...); } } Note how the abstract method next() should accept a CookieToken rather than the basic Token? So, the compiler says (and I quote) "No wayyy pal. CookieTokenizer is now one o' them abstract-classes cos' yer method signatures cannae be matched". OK. Fair enough, Mr Compiler. This is where the power of Interfaces is typically brought to bear: one would simply "virtualize" the basic Token class with an IToken interface. "All ABOARD!". Here we go now ... // define interface interface IToken { void setValue (char[]); } // specify that our Token implements the IToken interface class Token : IToken { void setValue (char[]); } // update Tokenizer base-class with the Interface class Tokenizer { abstract bool next (IToken token); // other base-class stuff here } // update LineTokenizer with the Interface class LineTokenizer : Tokenizer { bool next (IToken token) { // do some stuff // set Token content token.setValue (....); } } So far so good. Now we should be able to pass our CookieToken to the next() method because it is an *instance* of the IToken Interface. This concept is a fundamental of contractual-specification support that an OO Interface exposes: class CookieTokenizer : Tokenizer { bool next (CookieToken token) { // do some stuff // set Token content token.setValue (....); token.setName (...); } } Hey Presto! if yer CookieToken is an IToken instance or no!" Well, what can one say to that? Actually, I can think of a few choice phrases ... This is Interfaces 101, people. It doesn't even pass the sniff test. One might confidently state that the method-matching algorithm has absolutely no concept of Interfaces. You might think one could use a base-class instead right? Well, unfortunately, that didn't work in the first instance (before the Interface attempt). Apparently, D simply does not grok the concept of passing derived objects as an argument via a base-class. Let alone Interfaces. Can anyone say "polymorphic meltdown" ? Sigh. Double Sigh. Any ideas? Suggestions? Resolutions? Should I just give up? - Kris
Apr 06 2004
I'm not shure that i know exactly what the problem is,but can you not do this: class CookieTokenizer : Tokenizer { bool next (IToken token) { // do some stuff // set Token content token.setValue (....); token.setName (...); } } Then CookieTokenizer can take as an argument CookieToken because it implements IToken but it can't be cast to CookieToken to use it's specific properties? My plan was for these days to convert a parser i am writing in D to a version thet doesnt just take an argument of type char[][] but it can take an argument of type ILexicalElement, then the user implements ILexicalElement in his class and can, call my parser but what happens when i want to return to the user ILexicalElement (for example i return the one that coused a parsing error) and the user cant cast it back to his (MyLexElement) type to get some extra information? If i understand the problems with D interfaces i will have to wait before i convert my project to interfaces-version :( "Kris" <someidiot earthlink.dot.dot.dot.net> wrote in message news:c505g4$1n6f$1 digitaldaemon.com...I'm sure many of you are sick to death of hearing about Interface related flaws and bugs: personally, I'm thoroughly fed up of running into them.Thisone is another doozy ... OK; so we have a extensible Tokenizer subsystem. It scans input for delimited content and places the results in a Token. Here's astripped-downversion of the participants: class Token { private char[] value; void setValue (char[] value) { this.value = value; } } class Tokenizer { abstract bool next (Token token); // other base-class stuff here } class LineTokenizer : Tokenizer { bool next (Token token) { // do some stuff // set Token content token.setValue (....); } } There are a variety of Tokenizer derivatives that handle differentscanningflavours. We can specialize with a SpaceTokenizer, CommaTokenizer, RegexTokenizer, and so on. They all operate upon the basic Token class. Now, we wish to introduce a *slightly* more sophisticated Token derivative called CookieToken: class CookieToken : Token { private char[] name; void setName (char[] name) { this.name = name; } } ... and we want to pass it to a CookieTokenizer: class CookieTokenizer : Tokenizer { bool next (CookieToken token) { // do some stuff // set Token content token.setValue (....); token.setName (...); } } Note how the abstract method next() should accept a CookieToken ratherthanthe basic Token? So, the compiler says (and I quote) "No wayyy pal. CookieTokenizer is now one o' them abstract-classes cos' yer method signatures cannae bematched".OK. Fair enough, Mr Compiler. This is where the power of Interfaces is typically brought to bear: one would simply "virtualize" the basic Token class with an IToken interface. "All ABOARD!". Here we go now ... // define interface interface IToken { void setValue (char[]); } // specify that our Token implements the IToken interface class Token : IToken { void setValue (char[]); } // update Tokenizer base-class with the Interface class Tokenizer { abstract bool next (IToken token); // other base-class stuff here } // update LineTokenizer with the Interface class LineTokenizer : Tokenizer { bool next (IToken token) { // do some stuff // set Token content token.setValue (....); } } So far so good. Now we should be able to pass our CookieToken to thenext()method because it is an *instance* of the IToken Interface. This conceptisa fundamental of contractual-specification support that an OO Interface exposes: class CookieTokenizer : Tokenizer { bool next (CookieToken token) { // do some stuff // set Token content token.setValue (....); token.setName (...); } } Hey Presto! Whoops! Compiler says "Oan yer bike pally! Ahh don't care a wee flyingif yer CookieToken is an IToken instance or no!" Well, what can one say to that? Actually, I can think of a few choice phrases ... This is Interfaces 101, people. It doesn't even pass the sniff test. One might confidently state that the method-matching algorithm has absolutelynoconcept of Interfaces. You might think one could use a base-class instead right? Well, unfortunately, that didn't work in the first instance (before theInterfaceattempt). Apparently, D simply does not grok the concept of passingderivedobjects as an argument via a base-class. Let alone Interfaces. Can anyone say "polymorphic meltdown" ? Sigh. Double Sigh. Any ideas? Suggestions? Resolutions? Should I justgiveup? - Kris
Apr 07 2004
"Ivan Senji" <ivan.senji public.srce.hr> wrote in message news:c508u1$1sbm$1 digitaldaemon.com...Then CookieTokenizer can take as an argument CookieToken because it implements IToken but it can't be cast to CookieToken to use it's specific properties?Yes, one could use an upcast inside the next() method (that's just what I'm doing to keep momentum going). But there's at least five problems with that approach Ivan: 1) it totally abandons the inutuitive, expressive, and bug-eliminating approach that Interfaces were designed to help one avoid. That is, D does not support some of the most basic Interface fundamentals (and arguably some OO fundamentals). 2) It's counter-intuitive. One of the stated goals for D was, and is, "ease of use". The required use of upcasts to handle even this trivial design is so far off base ... I don't even know where to begin. 3) Cast should be avoided as much as possible, so as the compiler can tell you when you're doing something wrong. This is especially true for non-expert users. Again, Interfaces were designed to alleviate this. 4) the upcast would be a dynamic_cast. That's not a trivial piece of code to execute (it has a loop), so there are performance implications that could easily be avoided with the correct semantic support. 5) And perhaps worst of all: If, as you suggest, one were to upcast the IToken argument, the D compiler will silently emit bogus code into your executable such that it will deliberately cause an access-violation at runtime (in place of the upcast). According to recent public record, this is per design. The compiler is not expected to issue an error. Again, I just don't know what to say about that.and the user cant cast it back to his (MyLexElement) type to get some extra information?As it stands, you cannot cast() an interface back to a concrete object. The compiler emits code to cause ... well, we know what it does. You can revert to an arcane "decoration" approach, whereby your interface (and Object) exposes a method with this pattern: Object toObject() {return this;} Once you get the Interface converted to a real Object, you can then upcast it, using the slow dynamic_cast. Once again, this is not exactly what I'd refer to as "ease of use". Oh well; perhaps some good will come out of this farce :-( - Kris
Apr 07 2004
// update LineTokenizer with the Interface class LineTokenizer : Tokenizer { bool next (IToken token) { // do some stuff // set Token content token.setValue (....); } } So far so good. Now we should be able to pass our CookieToken to thenext()method because it is an *instance* of the IToken Interface. This conceptisa fundamental of contractual-specification support that an OO Interface exposes: class CookieTokenizer : Tokenizer { bool next (CookieToken token) { // do some stuff // set Token content token.setValue (....); token.setName (...); } }Were you expecting the bool next(CookitToken token) to override bool next(IToken token) If so I don't agree it should override. It is a very different signature. Overload, sure, but not override. Then again, maybe I don't understand your question. -Ben
Apr 07 2004
Having to perform an upcast for such a trivial design is, in my opinion, a failure at the language level, Ben; particularly so when cast() on an Interface deliberately barfs at runtime. And I suppose that post is really not a question, but a rant. Perhaps I'm Overloaded with frustration on what appears to be a zero level of commitment on Walter's part to even consider fixing the Interface travesty. Rather, the few responses (to posts by myself and others) have been laced with denial. Trying hard to get these three projects completed (in support of D, I might add), yet there's precious little in the way of "OK, let's take a serious look at these issues". It really seems as though every turn in the road vis-a-vis Interfaces is met with a metaphorical stonewall. On Reflection, I sound pissed-off. I should probably just back away; - Kris "Ben Hinkle" <bhinkle4 juno.com> wrote in message news:c50vlp$2ves$1 digitaldaemon.com...// update LineTokenizer with the Interface class LineTokenizer : Tokenizer { bool next (IToken token) { // do some stuff // set Token content token.setValue (....); } } So far so good. Now we should be able to pass our CookieToken to thenext()method because it is an *instance* of the IToken Interface. This conceptisa fundamental of contractual-specification support that an OO Interface exposes: class CookieTokenizer : Tokenizer { bool next (CookieToken token) { // do some stuff // set Token content token.setValue (....); token.setName (...); } }Were you expecting the bool next(CookitToken token) to override bool next(IToken token) If so I don't agree it should override. It is a very different signature. Overload, sure, but not override. Then again, maybe I don't understand your question. -Ben
Apr 07 2004
In article <c51k9i$tqm$1 digitaldaemon.com>, Kris says...Having to perform an upcast for such a trivial design is, in my opinion, a failure at the language level, Ben; particularly so when cast() on an Interface deliberately barfs at runtime. And I suppose that post is really not a question, but a rant. Perhaps I'm Overloaded with frustration on what appears to be a zero level of commitment on Walter's part to even consider fixing the Interface travesty.Walter tends to say things only once. but sometimes he says a different thing on the change log of the new release! He might even responde directly to you and all we others will be left on the dark... Ant
Apr 07 2004
Thanks, Antonio. I'll be sure to let you know (personally) if it's the latter <g> "Ant" <Ant_member pathlink.com> wrote in message news:c51m6l$10j9$1 digitaldaemon.com...In article <c51k9i$tqm$1 digitaldaemon.com>, Kris says...aHaving to perform an upcast for such a trivial design is, in my opinion,commitmentfailure at the language level, Ben; particularly so when cast() on an Interface deliberately barfs at runtime. And I suppose that post is really not a question, but a rant. Perhaps I'm Overloaded with frustration on what appears to be a zero level ofon Walter's part to even consider fixing the Interface travesty.Walter tends to say things only once. but sometimes he says a different thing on the change log of the new release! He might even responde directly to you and all we others will be left on the dark... Ant
Apr 07 2004
Yea hes notoriously non-commital , but the changes usually find there wa= y = in there. (Could you let me know also pls ? , preciate it :) ) C On Wed, 7 Apr 2004 12:06:34 -0800, Kris = <someidiot earthlink.dot.dot.dot.net> wrote:Thanks, Antonio. I'll be sure to let you know (personally) if it's the latter <g> "Ant" <Ant_member pathlink.com> wrote in message news:c51m6l$10j9$1 digitaldaemon.com...In article <c51k9i$tqm$1 digitaldaemon.com>, Kris says...Having to perform an upcast for such a trivial design is, in my =nopinion,afailure at the language level, Ben; particularly so when cast() on a=s =Interface deliberately barfs at runtime. And I suppose that post is really not a question, but a rant. Perhap=-- = D Newsgroup.I'mcommitmentOverloaded with frustration on what appears to be a zero level ofon Walter's part to even consider fixing the Interface travesty.Walter tends to say things only once. but sometimes he says a different thing on the change log of the new release! He might even responde directly to you and all we others will be left on the dark... Ant
Apr 07 2004
"C" <dont respond.com> wrote in message news:opr53xjdptehmtou localhost... Yea hes notoriously non-commital , but the changes usually find there way in there. (Could you let me know also pls ? , preciate it :) ) Me too please ?? Hey, I got a great idea, why dont you post it so we can all know? Phill. C On Wed, 7 Apr 2004 12:06:34 -0800, Kris <someidiot earthlink.dot.dot.dot.net> wrote:Thanks, Antonio. I'll be sure to let you know (personally) if it's the latter <g> "Ant" <Ant_member pathlink.com> wrote in message news:c51m6l$10j9$1 digitaldaemon.com...-- D Newsgroup. --- Outgoing mail is certified Virus Free. Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.648 / Virus Database: 415 - Release Date: 3/31/2004In article <c51k9i$tqm$1 digitaldaemon.com>, Kris says...aHaving to perform an upcast for such a trivial design is, in myopinion,commitmentfailure at the language level, Ben; particularly so when cast() on an Interface deliberately barfs at runtime. And I suppose that post is really not a question, but a rant. PerhapsI'mOverloaded with frustration on what appears to be a zero level ofon Walter's part to even consider fixing the Interface travesty.Walter tends to say things only once. but sometimes he says a different thing on the change log of the new release! He might even responde directly to you and all we others will be left on the dark... Ant
Apr 08 2004
Phill wrote:"C" <dont respond.com> wrote in message news:opr53xjdptehmtou localhost... Yea hes notoriously non-commital , but the changes usually find there way in there. (Could you let me know also pls ? , preciate it :) ) Me too please ?? Hey, I got a great idea, why dont you post it so we can all know? Phill.You know what? That just sounds wrong. If Walter is conversing through private email with somebody, then the content of the email is usually intended to stay private. Wouldn't Walter post these things here if he really wanted to? The polite thing would be to leave these announcements for Walter to post. I have no doubt that he would announce these things at the appropriate time. Announcing it early before a fix is even publicly released would just get everybody overly excited and impatient. my 100 dollars :-), John
Apr 08 2004
About the whole upcasting thing... implementing a "Castable" interface isn't too bad: version = castable; interface Castable { Object object(); } // any interface that wants to be castable should extend Castable interface IFoo : Castable { void foo(); } // sample class implementing a castable interface class Foo: IFoo { void foo() { print();} // IFoo Object object(){ return this; } // Castable } // sample function that takes a castable interface void bar(IFoo x) { Foo y; version(castable) { y = cast(Foo)x.object; // "cast" using .object } else { y = cast(Foo)x; // regular casts return null } y.print(); } int main() { bar(new Foo()); return 0; }
Apr 07 2004
Ben Hinkle wrote:About the whole upcasting thing... implementing a "Castable" interface isn't too bad:<snip code> Very interesting! I've been following these interface threads with growing consternation over the issues (Kris has a nasty habit of painting rather clear pictures ... bad, Kris, bad, bad, bad... you're too good at infecting people with dismay). It's nice to see some relatively "smooth" solutions in the meantime (versus ugly "hacks"). I wonder how comprehensive a solution this could be until the interface features in D can be fixed. :-) Later, John
Apr 07 2004
You're a comedian John <g>relatively "smooth" solutions in the meantime (versus ugly "hacks"). I wonder how comprehensive a solution this could be until the interface features in D can be fixed.Ben's suggestion is certainly fair. There are other vaguely similar solutions scattered throughout three different threads, yet all fall apart when testing one Interface against another. BTW, I am actually using what Ben has suggested as a workaround in Dsc.io alpha_6, which you should have received on Monday. Take a look at IConduit.d, and other related classes (Conduit.d, Socket.d, AbstractServer.d). - Kris (Hope you're feeling better ...) "John Reimer" <jjreimer telus.net> wrote in message news:c51rof$191s$1 digitaldaemon.com...Ben Hinkle wrote:About the whole upcasting thing... implementing a "Castable" interface isn't too bad:<snip code> Very interesting! I've been following these interface threads with growing consternation over the issues (Kris has a nasty habit of painting rather clear pictures ... bad, Kris, bad, bad, bad... you're too good at infecting people with dismay). It's nice to see some relatively "smooth" solutions in the meantime (versus ugly "hacks"). I wonder how comprehensive a solution this could be until the interface features in D can be fixed. :-) Later, John
Apr 07 2004
Kris wrote:You're a comedian John <g>Sometimes overdone... Forgive me!Well, I figured that none of these solutions could be absolutely foolproof. Workarounds rarely are.relatively "smooth" solutions in the meantime (versus ugly "hacks"). I wonder how comprehensive a solution this could be until the interface features in D can be fixed.Ben's suggestion is certainly fair. There are other vaguely similar solutions scattered throughout three different threads, yet all fall apart when testing one Interface against another.BTW, I am actually using what Ben has suggested as a workaround in Dsc.io alpha_6, which you should have received on Monday. Take a look at IConduit.d, and other related classes (Conduit.d, Socket.d, AbstractServer.d).Argh! I was wondering how you fixed it up. I hadn't quite got around to looking at alpha_6 internals. Shame on me!- Kris (Hope you're feeling better ...)Oh, I'm getting there. Thanks.
Apr 07 2004
On the face of it, that really doesn't seem so bad. It's when you dig a bit deeper that this house-of-cards start to fall apart. For example: I have a couple of Interfaces, IReadable and IWritable that are applied by a developer to any class they wish to "bind" into the Dsc.io environment. These interfaces are deliberately one method only, so as to impinge as little as possible on the developer. Should they have to implement some vague toObject() as well, just because COM support supposedly demotes Interface to a third-class citizen? That one is a stylistic issue. On perhaps a more practical note, I have reason to require testing whether an Interface (contract) is also an instance of another Interface (contract): in just the same manner as one sometimes tests plain old Object pairs. In such cases, both Interfaces would have to be "objectized" first (via toObject()) so they could be cast compared, but then they are now both Object instances and will test equivalent as such. They've lost their original type via the downcast <g> Walter had originally suggested placing a to[Type]() object in each interface, which would retain the original type. However, that's simply unrealistic because (a) each interface would thus need to be pre-configured with every concrete object-type that would ever choose to implement said interface, and (b) it explicitly binds the Interface to concrete-implementation, which then requires every single bit of that code be available just to compile said Interface <g> So, not only is toObject() somewhat arcane, it falls apart rather quickly. Part of my beef with all this Ben, is the "ease of use" concern. D *should* be easy to learn and use. That's a huge factor in the commercial-sector where learning difficulties are magnified/multiplied by the number of developers Does this make any sense? - Kris "Ben Hinkle" <bhinkle4 juno.com> wrote in message news:c51q1d$16ck$1 digitaldaemon.com...About the whole upcasting thing... implementing a "Castable" interface isn't too bad: version = castable; interface Castable { Object object(); } // any interface that wants to be castable should extend Castable interface IFoo : Castable { void foo(); } // sample class implementing a castable interface class Foo: IFoo { void foo() { print();} // IFoo Object object(){ return this; } // Castable } // sample function that takes a castable interface void bar(IFoo x) { Foo y; version(castable) { y = cast(Foo)x.object; // "cast" using .object } else { y = cast(Foo)x; // regular casts return null } y.print(); } int main() { bar(new Foo()); return 0; }
Apr 07 2004
It's pretty rare when Walter actually ignores us. But he often lurks, probably so he can spend his time actually doing real coding work :) More often than not, when we bring up these sorts of problems, we see them fixed a few versions later...even if the first notice of his work is in the Changelog. Take a look at prior discussions about templates/generics, delegates, etc. My counsel is to have patience. Kris wrote:Having to perform an upcast for such a trivial design is, in my opinion, a failure at the language level, Ben; particularly so when cast() on an Interface deliberately barfs at runtime. And I suppose that post is really not a question, but a rant. Perhaps I'm Overloaded with frustration on what appears to be a zero level of commitment on Walter's part to even consider fixing the Interface travesty. Rather, the few responses (to posts by myself and others) have been laced with denial. Trying hard to get these three projects completed (in support of D, I might add), yet there's precious little in the way of "OK, let's take a serious look at these issues". It really seems as though every turn in the road vis-a-vis Interfaces is met with a metaphorical stonewall. On Reflection, I sound pissed-off. I should probably just back away;
Apr 08 2004
"Ben Hinkle" <bhinkle4 juno.com> wrote in message news:c50vlp$2ves$1 digitaldaemon.com...Were you expecting the bool next(CookitToken token) to override bool next(IToken token) If so I don't agree it should override. It is a very different signature. Overload, sure, but not override. Then again, maybe I don't understand your question. -BenYou are, of course, absolutely right Ben. With respect to the title-post of this thread, I must offer a humble and profound apology for wasting everyone's time and bandwidth over what was a gross error on my part. - Kris
Apr 09 2004
Sigh. Double Sigh. Any ideas? Suggestions? Resolutions? Should I just==give up?Patience. All good things take time. You've made a good case and I thi= nk = Walter realizes something must be done. C On Tue, 6 Apr 2004 22:09:00 -0800, Kris = <someidiot earthlink.dot.dot.dot.net> wrote:I'm sure many of you are sick to death of hearing about Interface rela=tedflaws and bugs: personally, I'm thoroughly fed up of running into them=. =This one is another doozy ... OK; so we have a extensible Tokenizer subsystem. It scans input for delimited content and places the results in a Token. Here's a =stripped-down version of the participants: class Token { private char[] value; void setValue (char[] value) { this.value =3D value; } } class Tokenizer { abstract bool next (Token token); // other base-class stuff here } class LineTokenizer : Tokenizer { bool next (Token token) { // do some stuff // set Token content token.setValue (....); } } There are a variety of Tokenizer derivatives that handle different =scanning flavours. We can specialize with a SpaceTokenizer, CommaTokenizer, RegexTokenizer, and so on. They all operate upon the basic Token class=.Now, we wish to introduce a *slightly* more sophisticated Token =derivative called CookieToken: class CookieToken : Token { private char[] name; void setName (char[] name) { this.name =3D name; } } ... and we want to pass it to a CookieTokenizer: class CookieTokenizer : Tokenizer { bool next (CookieToken token) { // do some stuff // set Token content token.setValue (....); token.setName (...); } } Note how the abstract method next() should accept a CookieToken rather==than the basic Token? So, the compiler says (and I quote) "No wayyy pal. CookieTokenizer is==now one o' them abstract-classes cos' yer method signatures cannae be =matched". OK. Fair enough, Mr Compiler. This is where the power of Interfaces is=typically brought to bear: one would simply "virtualize" the basic Tok=enclass with an IToken interface. "All ABOARD!". Here we go now ... // define interface interface IToken { void setValue (char[]); } // specify that our Token implements the IToken interface class Token : IToken { void setValue (char[]); } // update Tokenizer base-class with the Interface class Tokenizer { abstract bool next (IToken token); // other base-class stuff here } // update LineTokenizer with the Interface class LineTokenizer : Tokenizer { bool next (IToken token) { // do some stuff // set Token content token.setValue (....); } } So far so good. Now we should be able to pass our CookieToken to the =next() method because it is an *instance* of the IToken Interface. This =concept is a fundamental of contractual-specification support that an OO Interfac=eexposes: class CookieTokenizer : Tokenizer { bool next (CookieToken token) { // do some stuff // set Token content token.setValue (....); token.setName (...); } } Hey Presto! Whoops! Compiler says "Oan yer bike pally! Ahh don't care a wee flying==if yer CookieToken is an IToken instance or no!" Well, what can one say to that? Actually, I can think of a few choice=phrases ... This is Interfaces 101, people. It doesn't even pass the sniff test. O=nemight confidently state that the method-matching algorithm has =absolutely no concept of Interfaces. You might think one could use a base-class instead right? Well, unfortunately, that didn't work in the first instance (before the =Interface attempt). Apparently, D simply does not grok the concept of passing =derived objects as an argument via a base-class. Let alone Interfaces. Can any=onesay "polymorphic meltdown" ? Sigh. Double Sigh. Any ideas? Suggestions? Resolutions? Should I just==give up? - Kris-- = D Newsgroup.
Apr 07 2004
Just to be sure, could you please post a complete example that illustrates the problem, rather than me trying to piece one together? That way, it avoids misunderstandings on my part.
Apr 07 2004
"Walter" <walter digitalmars.com> wrote in message:Just to be sure, could you please post a complete example that illustrates the problem, rather than me trying to piece one together? That way, it avoids misunderstandings on my part.Yes, I will send you an example Walter. What I ask in return, and what I feel is *far* more valuable, is for you to please review the attached document and comment on the following suggested items: a) what you agree with as valuable, and what you think is worthless. Both specifically with respect to the D language. b) if there are features in there that are agreeable to you, then when (what version) you would expect them to be fully supported. That document effectively represents an Interface (contract) with respect to these issues <g>. If you're not prepared to come to the table and discuss, then there's not much else to talk about, is there? If you wish to continue receiving "support" from me, then you truly have to make certain commitments one way or another. I sincerely hope you find that agreeable. If, for instance, you don't agree with any of the points made in said document, then I'd simply be wasting my time (and those on this newsgroup) by extending this particular thread, and by sending you further examples. On the other hand, receiving widespread free "support", plus a usable code-base, from this NG is surely worth a few solid commitments? Respectfully, - Kris p.s. the attached is the version which differentiates between COM interface and OO Interface, and where the frustration-meter is toned down a little. begin 666 D Interfaces.doc M____________________________________________________________ M____________________________________________________________ M____________________________________________________________ M____________________________________________________________ M____________________________________________________________ M____________________________________________________________ M____________________________________________________________ M____________________________________________________________ M____________________________________________________________ M_______________________LI<$`32 )! ``\!*_````````$ ``````! `` MHB(```X`8FIB:N(]XCT````````````````````````)!!8`(CH``(!7``" M````^ ```/H`````````^ ````````#Z`````````/H`````````^ ```!0` M``````````````X!````````1 H```````!$" ```````$0*````````1 H` M````````R2(``"0```!Z) ``( (``)HF```$`0``[2(``!4````````````` M``````#Z`````````* *````````QR(``````````````````*\+```````` M```````````````````````````````````````````````````````````` M``!\````^ ````````#Z```````````````````````````````````````` M````````````````````````````````````````````JR ```````"H" `` M`````)P*```,```` %K\<?<<Q $.`0``- D``$0*````````I0L```H```"O M'P``$ ``````````````JR ``!P"```8(P``, ```$ C````````P1\``.H` M```````.`0```````/H`````````^ ````````#Z`````````/H````````` M:6-A;"!L;V]K(&%T('=H870 =&AE($0 ;&%N9W5A9V4 8VQA:6US('1O(')E M<')E<V5N="!A<R!S=7!P;W)T(&9O<B!T:&4 3T\ 26YT97)F86-E(&UE8VAA M;FES;2X 5&AI<R!G;V%L(&AE<F4 :7, ;F]T('1O(&)E;&ET=&QE('1H92!E M9F9O<G1S(&5X<&5N9&5D(&)Y(%=A;'1E<CL <F%T:&5R+"!I="!I<R!T;R!E M;G-U<F4 1"!H87, 82!R;V)U<W0 86YD('5S86)L92!);G1E<F9A8V4 :6UP M;&5M96YT871I;VXN($AA=FEN9R!S86ED('1H870L(&]N92!H87, =&\ 9FER M<W0 <&EC:R!A<&%R="!F86-T=6%L(&EM<&QE;65N=&%T:6]N(&9R;VT 9&]C M=6UE;G1E9"!C;&%I;7,N(%1O(&)E(&-L96%R+"!)('-H;W5L9"!S=&%T92!T M:&%T('1H:7, 9&]C=6UE;G0 87!P;&EE<R!E>&-L=7-I=F5L>2!T;R!/3R!) M<G0N( T-3&5TDG, <W1A<G0 =VET:"!W:&%T(&%N($EN=&5R9F%C92!R97!R M97-E;G1S+ T-06X 26YT97)F86-E(&ES(&$ ;65C:&%N:7-M('5S960 =&\ M9&4M8V]U<&QE(&EM<&QE;65N=&%T:6]N(&9R;VT <W!E8VEF:6-A=&EO;BX M5&AE('9A;'5E(&]F(&1E8V]U<&QI;F< =VEL;"!N;W0 8F4 97AP;&%I;F5D M(&9U<G1H97( =VET:&EN('1H:7, 9&]C=6UE;G0L(&)U="!S=69F:6-E('1O M('-A>2!T:&%T(&EF('EO=9)V92!E=F5R('5S960 86X 86)S=')A8W0M8VQA M<W, 86YD(&5X8VQA:6UE9""3=V]W(90 =7!O;B!D:7-C;W9E<FEN9R!I=', M<&]L>6UO<G!H:6, 86)I;&ET:65S+"!T:&5N('EO=2!U;F1E<G-T86YD('1H M82!C;VYC<F5T92!C;&%S<RP :6X =&AE('-A;64 ;6%N;F5R('1H870 86X M86)S=')A8W0M8VQA<W, :7, ;F]T(&-O;F-R971E+B!);G-T96%D+"!I="!R M97!R97-E;G1S(&%N(&%G<F5E9"UU<&]N(&-O;G1R86-T=6%L(&]B;&EG871I M;VX 8F5T=V5E;B!A('!R;V1U8V5R(&%N9"!A(&-O;G-U;65R+B!,9722<R!S M87D =V4 :&%V92!T=V\ 9&5V96QO<&UE;G0 9W)O=7!S(&]N(&]P<&]S:71E M('-I9&5S(&]F('1H92!W;W)L9"P 8V\M9&5V96QO<&EN9R!S;VUE('!R;V1U M8W0N(%1H92!T=V\ 9W)O=7!S('=O=6QD(&=E="!T;V=E=&AE<B!A;F0 :&%S M:"!O=70 =&AE(&1E=&%I;', ;V8 :&]W('1H92!M;V1U;&4 9G)O;2!O;F4 M=&5A;2!W:6QL(&-O;G9E<G-E+"!A;F0 97AC:&%N9V4 :6YF;W)M871I;VXL M('=I=& =&AE(&UO9'5L92!F<F]M('1H92!O=&AE<B!T96%M+B!4:&]S92!D M971A:6QS(&UI9VAT('1H96X 8F4 =W)I='1E;B!U<"!A<R!A(&)I;F1I;F< M8V]N=')A8W0 8F5T=V5E;B!T:&4 ='=O('!A<G1I97,N($EF(&]N92!P87)T M>2!F86EL<R!T;R!A9&AE<F4 =&\ =&AE(&-O;G1R86-T+"!A;&P 8F5T<R!A M<F4 ;V9F+B!(;W=E=F5R+"!I9B!B;W1H('!A<G1I97, <W1A;F0 8GD =&AE M:7( ;V)L:6=A=&EO;B!T:&5N('-O;65T:&EN9R!A:VEN('1O(&UA9VEC(&AA M<'!E;G, =VAE;B!T:&4 ='=O(&UO9'5L97, 87)E(&)O;'1E9"!T;V=E=&AE M<BX 5&AI<R!C;VYT<F%C='5A;"!O8FQI9V%T:6]N(&ES('=H870 86X 26YT M86X 86)S=')A8W0M8VQA<W, :6X ;VYE(&ME>2!R97-P96-T.B!A('-I;F=L M>2!R;V]T960 :&EE<F%R8VAY("AS=6-H(&%S(&5X<&]S960 8GD 1"!O<B!* M879A*2!C86YN;W0 :6YH97)I="!F<F]M(&UO<F4 =&AA;B!O;F4 <W5P97(M M8VQA<W, 870 82!T:6UE.B!A8G-T<F%C="!O<B!O=&AE<G=I<V4N($]N('1H M92!O=&AE<B!H86YD+"!A;GD 9VEV96X 8VQA<W, ;6%Y(&EM<&QE;65N="!M M=6QT:7!L92!I;G1E<F9A8V5S+B!4:&ES(&5N9&]W<R!T:&4 :6UP;&5M96YT M:6YG(&-L87-S('=I=& ;75C:"!O9B!T:&4 <V%M92!U<V%B;&4 <&]W97( M;V8 ;75L=&EP;&4M:6YH97)I=&%N8V4L('=H:6QS="!S:61E<W1E<'!I;F< M<V]M92!O9B!T:&4 ;6%J;W( :7-S=65S+ U4:&4 26YT97)F86-E(&UE8VAA M;FES;2!I<R!E>'!L:6-I=&QY(&1E<VEG;F5D('1O(&5X<&]S92!T:&4 8V]N M=')A8W0L('1H92!W:&]L92!C;VYT<F%C="P 86YD(&YO=&AI;F< 8G5T('1H M92!C;VYT<F%C="X ($EN(&1E=F5L;W!M96YT(&=R;W5P<RP =&AI<R!I<R!O M9G1E;B!U<V5D('1O(&AI9&4 ;65T:&]D<R!O9B!A(&-L87-S(&9R;VT 8V5R M=&%I;B!S96=M96YT<R!O9B!T:&4 <'5B;&EC('=H:6QS="!A="!T:&4 <V%M M92!T:6UE(&UA:VEN9R!T:&5M(&%V86EL86)L92!T;R!O=&AE<G,N($%S('-U M8V L(&%N($EN=&5R9F%C92!C86X <')O=FED92!A('9I97< =7!O;B!A;B!I M;7!L96UE;G1I;F< 8VQA<W,N( U);G1E<F9A8V5S(&%R92!B;W1H(&AI97)A M<F-H:6-A;"!A;F0 8V]M<&]S:71I;VYA;"!I;B!N871U<F4N(%1H870 :7,L M(&]N92!);G1E<F9A8V4 8V%N(&EN:&5R:70 9G)O;2!A;F]T:&5R+"!O<B!F M<F]M(&UU;'1I<&QE(&]T:&5R<RX 02!C;VYC<F5T92!I;7!L96UE;G1I;F< M8VQA<W, ;75S="P ;V8 8V]U<G-E+"!I;7!L96UE;G0 86QL(&-O;G1R86-T M=6%L(&]B;&EG871I;VYS+B!3=6-H(&-L87-S97, =&AA="!D;R!N;W0 :6UP M;&5M96YT('1H92!E;G1I<F4 8V]N=')A8W0 87)E+"!B>2!T:&5I<B!N871U M;VEN=', 86)O=70 =&AE('!R86-T:6-A;"!U<V4 ;V8 26YT97)F86-E<R!I M;F-L=61E.B -3VYC92!I;G-T86YT:6%T960 =FEA(&$ 8V]N8W)E=&4M8VQA M<W,L(&%N(&EN=&5R9F%C92!C86X 8F4 =7-E9"!I;B!L:65U(&]F('-A:60 M8VQA<W, 9F]R(&%L;"!R96=U;&%R(&]P97)A=&EO;G,N($EN('1H:7, =V%Y M+"!A;B!I;G-T86YT:6%T960 26YT97)F86-E(&)E:&%V97, :6X 97AA8W1L M>2!T:&4 <V%M92!M86YN97( 87, 86X :6YS=&%N=&EA=&5D(&%B<W1R86-T M+6-L87-S+B!);B!F86-T+"!T;R!T:&4 8V]N<W5M:6YG(&1E=F5L;W!E<B!T M:&5R92!S:&]U;&0 8F4 >F5R;R!D:69F97)E;G1I871I;VXN(%=I=&AO=70 M=&AI<R!F86-I;&ET>2!O;F4 8V%N;F]T(&-L96%R;'D 97AP;W-E(&UO9'5L M87( 8VAU;FMS(&]F(&9U;F-T:6]N86QI='D 87, 86X 26YT97)F86-E+"!A M;F0 =&AE(&9U;F1A;65N=&%L(&)E;F5F:71S(&5X<&]S960 8GD (S(L(",S M+"!A;F0 (S0 =V]U;&0 8F4 8G)O:V5N+ U);G1E<F9A8V4 8V]N=')A8W1S M(&%R92!C;VUM;VYL>2!U<V5D('1O('-E="!T:&4 <G5L97, 9F]R(&UU;'1I M<&QE('!A<G1I97, =&\ <')O=FED960 8V]M<&5T:6YG(&)U="!C;VUP871I M8FQE('!R;V1U8W1S+B!&;W( 97AA;7!L92P ;VYE(&UI9VAT(&EM86=I;F4 M82!0<FEN=&5R(&1E=FEC92UD<FEV97( 8F5I;F< 97AP;W-E9"!A<R!A;B!I M;G1E<F9A8V4N($]N92!M:6=H="!A;'-O(&%C:&EE=F4 =&AI<R!V:6$ 86X M86)S=')A8W0 8F%S92UC;&%S<RP 8G5T('1H870 9F%I;', <75I8VML>2!W M:71H:6X 82!S:6YG;'D <F]O=&5D(&AI97)A<F-H>2 H96%C:"!V96YD;W( M:7, <')O:&EB:71E9"!F<F]M(&1E<FEV:6YG(&1I<F5C=&QY(&9R;VT =&AE M=F%L=64 ;V8 :6YT97)F86-E<R!I<R!T:&%T('1H97D 8V%N(&)E('5S960 M=&\ 9&4M8V]U<&QE(&-O;7!L97 <F5L871I;VYS:&EP<R!B>2!A8W1I;F< M87, 82!P<F]X>2P ;W( 8G)O:V5R+B!4:&ES(&ES(&]F=&5N('5S960 =&\ M<F5S;VQV92"39F]R=V%R9"UR969E<F5N8V64(&ES<W5E<RP 8GD 8G)E86MI M;F< ;W5T('1H92!C;VUP;&5X('!A<G0 ;V8 =&AE(')E;&%T:6]N<VAI<"!A M=F4 =7, =VET:"!R97-P96-T('1O($0_("!796QL+"!L971S('1A:V4 82!L M;V]K(&%T('1H92!K:6YD<R!O9B!T:&EN9W, 9&5V96QO<&5R<R!W:7-H('1O M(&1O('=I=& :6YT97)F86-E<RP 86YD('1H96X =7-E(&$ ='EP92!O9B!S M8V]R96)O87)D('1O(')A8VL =7 82!C;VUP87)A=&EV92!R871I;F<N($1E M=F5L;W!E<G, =7-E(&EN=&5R9F%C97, :6X =&AE(&9O;&QO=VEN9R!W87ES M. U$97-I9VX 8V]N=')A8W1U86P ;V)L:6=A=&EO;G, 8F5T=V5E;B!I;G1E M<F%C=&EN9R!M;V1U;&5S('1H870 87)E+"!F;W( =VAA=&5V97( <F5A<V]N M+"!C;VYS=')U8W1E9"!I;B!I<V]L871I;VXN( U3970 9W)O=6YD+7)U;&5S M(&9O<B!S>7-T96US('1H870 87)E('1O(&)E(&EM<&QE;65N=&5D(&)Y(&]T M97)F86-E+"!T:&]U9V :70 <F5P<F5S96YT<R!O;FQY('!A<G0 ;V8 =&AE M97)I=F5D('-U8F-L87-S(&%S(&EM<&QE;65N=&EN9R!A;B!);G1E<F9A8V4L M('=H97)E('!A<G0 ;V8 =&AE(&-O;G1R86-T(&ES(&UA;FEF97-T960 8GD M=&AE('-U<&5R+6-L87-S(&EM<&QE;65N=&%T:6]N+ U%>'!O<V4 82!C;VYC M<F5T92!O8FIE8W0 87, 86X 26YT97)F86-E+"!E:71H97( 87, 82!V:65W M+"!O<B!B96-A=7-E('1H92!I;7!L96UE;G1A=&EO;B!I<R!T;R!B92!R96YD M8FIE8W0 :6UP;&5M96YT<R!A('-P96-I9FEC($EN=&5R9F%C92P 9F]R('1H M92!S86UE(')E87-O;G, 870 =&\ =VAY(&]N92!T97-T<R!/8FIE8W1S(&%G M86EN<W0 ;VYE(&]T:&5R+ U497-T('=H971H97( 86YY(&=I=F5N($EN=&5R M9F%C92!S=7!P;W)T<R!A;B!A9&1I=&EO;F%L(&-O;G1R86-T("AA;F]T:&5R M<&4 :7, ;6%S<75E<F%D:6YG(&%S(&%N(&EN=&5R9F%C92X 5&AI<R!I<R!U M<V5D(&EN('1H92!S86UE('-C96YA<FEO<R!W:&5R92!O;F4 =VES:&5S('1O M('1E<W0 =VAE=&AE<B!A(&)A<V4M8VQA<W, :7, ;V8 82!C;VYC<F5T92!C M;&%S<R!T>7!E+B!3=6-C97-S9G5L('1E<W1I;F< :7, ='EP:6-A;&QY(&9O M;&QO=V5D(&)Y(&%N('5P8V%S="!T;R!S86ED(&-O;F-R971E(&-L87-S+71Y M=V]U;&0 =FEA(&%N(&%B<W1R86-T+6-L87-S+ U$96QE=&4L(&]R(&]T:&5R M=VES92!M86YI<'5L871E+"!A;B!);G1E<F9A8V4 87, ;VYE('=O=6QD(&%N M(&%B<W1R86-T+6-L87-S+ U);G9O:V4 82!M971H;V0 =VET:"!A;B!O=F5R M;&]A9&5D($EN=&5R9F%C92!A<F=U;65N="X 268 ;VYE(&1E9FEN97, 82!M M971H;V0 =VET:"!A;B!);G1E<F9A8V4 87)G=6UE;G0L('1H870 ;65T:&]D M('-H;W5L9"!B92!C86QL86)L92!W:71H(&%N>2!A<F=U;65N="!T:&%T(&EM M9B!T:&4 ;&ES="!R979E86QS('1W;R!B87-I8R!C;&%S<VEF:6-A=&EO;B!P M<&%B:6QI=&EE<PU,9722<R!U<V4 =&AE<V4 =&\ 8V]M<&%R92!$(&%G86EN M<W0 <V]M92!O=&AE<B!L86YG=6%G92!T:&%T(&-L86EM<R!T;R!S=7!P;W)T M(&EN=&5R9F%C97,L(&%N9"!S964 =VAA="!H87!P96YS+B!4:&4 <V-O<FEN M9R!M971H;V0 87!P;&EE9"!H97)E(&ES('1O(&=A:6X 82!V86QU92!O9B!O M;F4 =VAE<F4 =&AE($EN=&5R9F%C92!M96-H86YI<VUS(&%R92!P<F]P97)L M>2!S=7!P;W)T960L(&%N9"!T;R!L;W-E(&$ =F%L=64 ;V8 ;VYE('=H97)E M('1H92!M96-H86YI<VUS(&%R92!B<F]K96XN($$ =F%L=64 ;V8 >F5R;R!I M<R!A<'!L:65S('1O('1H;W-E(&-A<V5S('=H97)E(&ET(&UA:V5S(&YO('-E M;G-E(&EN('1H92!C;VYT97AT(&]F('1H92!R96QE=F%N="!L86YG=6%G92X M5V62;&P =7-E('1H92!N=6UB97)E9"!I=&5M<R!F<F]M('1H92!P<FEO<B!L M96YT<P<',0<Q!S$'17%U:79A;&5N= <', <Q!S$'17%U:79A;&5N= <',P<Q M!S$'17%U:79A;&5N="!A<R!O9B!$('8P+C R!P<T!RTQ!S$'0V]M<&EL97( M97AP;&EC:71L>2!I9VYO<F5S('-U<&5R+6-L87-S(&EM<&QE;65N=&%T:6]N M!P<U!S$',0=%<75I=F%L96YT!P<V!RTQ!S$'1"!E>'!L:6-I=&QY(&5M:71S M(&%C8V5S<RUV:6]L871I;VX 8V]D90<'-P<M,0<Q!T0 97AP;&EC:71L>2!E M;6ET<R!A8V-E<W,M=FEO;&%T:6]N(&-O9&4'!S '+3$',0=$(&5X<&QI8VET M;'D 96UI=', 86-C97-S+79I;VQA=&EO;B!C;V1E!P<Y!S$',0=%<75I=F%L M96YT+"!W:71H('5S92!O9B!T:&4 86QI87, :V5Y=V]R9 <',3 '+3$', =! M8V-E<W,M=FEO;&%T:6]N('-O;65W:&5R92!W:71H:6X =&AE($0 <W5P<&]R M="!L:6)R87)Y!P<Q,0<M,0<Q!T0 ;65T:&]D+7-E;&5C=&]R(&1O97, ;F]T M(&%P<&5A<B!T;R!S=7!P;W)T($EN=&5R9F%C97,'!U-C;W)E. <M,0<Q, <' M!PU7:&%T(&1O97, =&AI<R!T96QL('5S/R!796QL+"!I="!T96QL<R!T:&4 M($EN=&5R9F%C97, :7, 86QM;W-T(&-O;7!L971E(&EN($0N(%1H92!L86-K M(&]F('-U<'!O<G0 9F]R(&EN:&5R:71E9"!I;7!L96UE;G1A=&EO;B!L96%D M<R!T;R!A(&9O<F5S="!O9B!S:&5L;"!M971H;V1S('1H870 <VEM<&QY(&EN M=F]K92!T:&5I<B!S=7!E<BUC;&%S<R!C;W5N=&5R<&%R="X 5&AI<R!I<R!A M<R!A8GES;6%L+B!4:&4 ;VYL>2!T:&EN9R!O;F4 8V%N(&1O('=I=& 82!$ M($EN=&5R9F%C92!I<R!T;R!I;G9O:V4 ;65T:&]D<R!U<&]N(&ET+B!4:&ES M(&ES(&-R:7!P;&EN9R!I;B!A(&UA;FYE<B!M;W-T(&-R=65L+"!A;F0 9&5S M=')O>7, ;6]S="!O9B!T:&4 =')U92!V86QU92!A;F0 9&5S:6=N(&)E;F5F M:71S(&%F9F]R9&5D(&)Y('1H92!);G1E<F9A8V4 ;65C:&%N:7-M+B!)=&5M M<R C,BP (S,L(&%N9" C-"!N;W1E9"!O;B!P86=E(&]N92!A<F4 ;F5U=&5R M960N( T-26X <VAO<G0L($0 :6YT97)F86-E<R!A<F4 8F%R96QY(&UO<F4 M=&AA;B!A('=R87!P97( 87)O=6YD($-/32P 86YD(&$ =&AI;FQY('9E:6QE M9"!M87)K971I;F< =&]O;"!F;W( =&AO<V4 =VAO('5S92!/3R!);G1E<F9A M8V5S(&EN(')E86PM=V]R;&0 <V-E;F%R:6]S+B!7:71H;W5T('1H92!A<'!R M;W!R:6%T92!R=6YT:6UE('-U<'!O<G0L($0 26YT97)F86-E<R!A<F4 86QL M92!S;VUE=&AI;F< =&AA="!T:&4 8V]M;65R8VEA;"UD979E;&]P;65N="US M96-T;W( ;&5V97)A9V5S(&]N(&$ 9&%I;'D 8F%S:7,N($%N>6]N92!E=F%L M=6%T:6YG($0 9F]R('-U8V 86X 96YV:7)O;FUE;G0 =VEL;"!E;&EM:6YA M=&4 :70 <'5R96QY(&]N('1H97-E(&=R;W5N9', 86QO;F4N(%1H870 =V]U M;&0 8F4 82!S:&%M92!F;W( 1"P 86YD(&YO="!J=7-T(&)E8V%U<V4 ;W1H M97( ;&%N9W5A9V4 87-P96-T<R!A<F4 9V5N97)A;&QY(')O8G5S="!A;F0 M=V5L;"!T:&]U9VAT(&]U="X-```````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M``\U"(%"* A<"(%P:/___P`&- B!70B!"P`$```8! ``&00``.X%``#O!0`` M$P``B!,``((4``#W M````````````````] ```````````````/0```````````````#T```````` M````````^P```````````````/ ```````````````#I```````````````` M`````````.(```````````````#B````````````````X `````````````` M`.(```````````````#B````````````````X ```````````````.(````` M``````````#B M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M``#Q M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M``````````````````````````````````````````````````D```,D`18D M`4EF`0```&$D`0<```HF``M&!0`4I' `"0``"B8`"T8%`!.D> `4I' ```$` M``!(' ``4QP``%!(``````````````!*````````````````2 `````````` M`````$H```````````````!*```````````````````````````````````` M```````````````````````````````````````````````````````````& M```6) %)9 $```"O```6) $7) %)9 $````"EFP`!=88! $)``8!"0`&`0D` M! $)``8!"0`&`0D`"-9<``0``-H$O >,"L A ;:! `````````````````` M``" !N("`````````````````````( &T (````````````````````` 8T M `&`0````" ``8!`````( `! $````` `&`0````" ``8!```4] $``!4V M```%4QP``%0<``!6' ``6!P``%H<``!E' ``9AP``& <``!J' ``;!P``(4< M``"&' ``:T ``````````````&4```````````````!E```````````````` M90```````````````&4```````````````!K ``````````````90`````` M`````````&4```````````````!E````````````````90`````````````` M`&O\``````````````````````````````8``!8D`4EF`0```)0``!8D`1<D M`4EF`0````*6; `%UA &`0D`! $)``8!"0`&`0D`! $)``8!"0`(UEP`! `` MV 2\!XP*P"$`!MH$```````````````````````&X (````````````````` M``````;0` ``````````````````````!C07``````````````````````IT M%P"O`!/6, `` `&`0````" ``8!`````( `! $````` `&`0````" ``8! M`````/D```````````````#Y````````````````94 ``````````````/D` M``````````````#Y````````````````^0```````````````/D````````` M``````!EQ ``````````````^0``````````````````````````````E `` M%B0!%R0!268!`````I9L``76& 8!"0`&`0D`! $)``8!"0`&`0D`! $)``C6 M````````````!M "```````````````````````&-!<````````````````` M````"G07`*\`$]8P``" ``8!`````( `! $````` `&`0````" ``8!```` MWAP```<=```('0``"AT```T=```/'0``.!T``#D=```['0``/AT``/D````` M``````````#Y````````````````^0```````````````&7$```````````` M``#Y````````````````^0```````````````/D```````````````#Y```` M````````````9<0``````````````/D```````````````#Y```````````` M``````````````````"4```6) $7) %)9 $````"EFP`!=88! $)``8!"0`& M`0D`! $)``8!"0`&`0D`"-9<``0``-H$O >,"L A``;:! `````````````` M````````!N("```````````````````````&T (````````````````````` M``8T%P`````````````````````*=!<`KP`3UC ``( `! $````` `&`0`` M``" ``8!`````( `! $````` `&`0````" ``8!```4] $``!4V`1K6$ `` M`4EF`0`````+/AT``$ =``!I'0``:AT``&P=``!N'0``<!T``)H=``";'0`` MGAT``*$=``"C'0``^0```````````````/D```````````````!EQ `````` M````````^0```````````````/D```````````````#Y```````````````` M^0```````````````&4$`0````````````#Y````````````````^0`````` M`````````/D``````````````````````````````)0``!8D`1<D`4EF`0`` M``*6; `%UA &`0D`! $)``8!"0`&`0D`! $)``8!"0`(UEP`! ``V 2\!XP* MP"$`!MH$```````````````````````&X (```````````````````````;0 M` ``````````````````````!C07``````````````````````IT%P"O`!/6 M, `` `&`0````" ``8!`````( `! $````` `&`0````" ``8!`````( ` M`.0=```<' ``'1X``"0>```G' ``*AX``"L>``#Y````````````````900! M`````````````/D```````````````#Y````````````````^0`````````` M`````/D```````````````!E/ ``````````````^0```````````````/D` M``````````````#Y````````````````^0`````````````````````````` M````E ``%B0!%R0!268!`````I9L``76& 8!"0`&`0D`! $)``8!"0`&`0D` M````````! $)````````!M "```````````&`0D````````&-!<````````` M``8!"0``````"G07`*\`$]8P``" ``8!`````( `! $````` `&`0````" M```L' ``+1X``&L>``!5'P``>2 ``'H ``!Q(0``<B$``*(B``!K```````` M````````:0```````````````&D```````````````! ```````````````` M60```````````````&D```````````````!I````````````````:0`````` M`````````&D````````````````````````````````````````````'```* M) `+1 8`%*0\``D```HF``M&! `3I' `%*0\```!``"4```6) $7) %)9 $` M```"EFP`!=88! $)``8!"0`&`0D`! $)``8!"0`&`0D`"-9<``0``-H$O >, MUC ``( `! $````` `&`0````" ``8!`````( `! $````` `&`0````" M________'-80_____________________QW6$/____________________\T M); ````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````4``\`" `!`&D`#P M````````````. ``0/'_` `X``P`! !.`&\`< !M`&$`; ````(````8`$-* M& !?2 $$84H8`&U("01S2 D$=$ )!%(``4 !``(`4 `,``D`2 !E`&$`9 !I M`%%*` !<"(%>2 (`84H ```````````````````````\`$% \O^A`#P M`$0`90!F`&$`=0!L`'0`( !0`&$`< !A`&<`< !A`' `: ` `$8`;P!N`'0` M`````````````````````*(>```$```Z`````/____\`````& ```!D```#N M.! ``$$8``!"& ``1! ``$88``!(& ``4Q ``%08``!6& ``6! ``%H8``!E M& ``9A ``& 8``!J& ``;! ``(48``"&& ``B! ``(L8``"-& ``Q! ``,48 M``T9```/&0``.!D``#D9```[&0``/AD``$ 9``!I&0``:AD``&P9``!N&0`` M& ``'1H``"0:```G& ``*AH``"L:```L& ``+1H``&L:``!5&P``>1P``'H< M ```( `! ``HB(``!(`````! ``CQ ``$$<``!3' ``AAP``-D<```^'0`` MHQT``"L>``"B( ``$P```!4````6````%P```! ````9````& ```!L````< M``````0``*(B```4````#P M```!````` ```$ `'O$0````__\`````_P" ( `]P``$ `/``+PD ```! ` M"/ (`````0````$$```/``/P, ````\`!/ H`````0`)\! ````````````` M````````````` `*\ `````! ``!0````\`!/!"````$ `*\ ````!! `` M``X``%,`"_ >````OP$``! `RP$`````_P$``` `! ,)````/P,!``$````1 M`&8`= ` `&4`= !C`%P`;0!Y`" `9 !O`&,`=0!M`&4`; !T`',`7 !$`" ` M20!N`'0`90!R`&8`80!C`&4`<P`N`&0`;P!C``0`2P!R`&D`<P!D`$,`. !< M`$0`;P!C`'4`;0!E`&X`= !S`" `80!N`&0`( !3`&4`= !T`&D`; !G`',` M7 !+`'(`:0!S`%P`00!P`' `; !I`&,`80!T`&D`;P!N`" `1 !A`'0`80!< M`$T`:0!C`'(`;P!S`&\`9 !T`%P`5P!O`'(`9 !<`$$`=0!T`&\`4 !E`&,` M;P!V`&4`< !Y`" `<P!A`'8`90` `&\`9 ` `$0`( !)`&X`= !E`'(`9 !A M`&,`90!S`"X`80!S`&0`! !+`'(`:0!S`&0`0P`Z`%P`1 !O`&,`=0!M`&4` M; !T`',`( !A`&X`9 ` `%,`90!T`'0`:0!N`&<`<P!<`$L`< !I`',`7 !! M`' `< !L`&D`8P!A`'0`:0!O`&X`( !$`&$`= !A`%P`30!I`&,`< !O`',` M;P!F`'0`7 !7`&\`< !D`%P`00!U`'0`;P!2`&4`8P!O`'8`90!R`'D`( !S M`&$`= !E`" `;P!F`" `1 ` `$D`; !T`&4`< !F`&$`8P!E`',`+ !A`',` M`" `4P!E`'0`= !I`&X`9P!S`%P`2P!R`&D`<P!<`$$`< !P`&P`:0!C`&$` M= !I`&\`; ` `$0`80!T`&$`7 !-`&D`8P!R`&\`<P!O`&8`= !<`%<`;P!R M`&0`7 !!`'4`= !O`%(`90!C`&\`= !E`'(`>0` `',`80!V`&4`( !O`&8` M( !$`" `20!N`'0`90!R`&8`80!C`&4`<P`N`&$`<P!D``0`2P!R`&D`<P`N M`$4`. !<`$T`:0!C`'(`;P!S`&\`9 !T`" `90!T`&,`7 !M`'D`( !D`&\` M8P!U`&T`90!N`'0`<P!<`$0`( !)`&X`= !E`'(`9 !A`&,`90!S`"X`9 !O M`&,`! !+`'(`:0!S`"X`10`Z`%P`30!I`&,`< !O`',`;P!F`'0`( !E`'0` M8P!<`&T`>0` `&0`;P!C`'4`;0!E`&X`= !S`%P`1 ` `$D`; !T`&4`< !F M`&$`8P!E`',`+ !D`&\`8P`$`$L`< !I`',`+ !%`#H`7 !-`&D`8P!R`&\` M<P!O`&8`= ` `&4`= !C`%P`;0!Y`" `9 !O`&,`=0!M`&4`; !T`',`7 !$ M`" `20!N`'0`90!R`&8`80!C`&4`<P`N`&0`;P!C``0`2P!R`&D`<P!D`$,` M. !<`$0`;P!C`'4`;0!E`&X`= !S`" `80!N`&0`( !3`&4`= !T`&D`; !G M`',`7 !+`'(`:0!S`%P`00!P`' `; !I`&,`80!T`&D`;P!N`" `1 !A`'0` M80!<`$T`:0!C`'(`;P!S`&\`9 !T`%P`5P!O`'(`9 !<`$$`=0!T`&\`4 !E M`&,`;P!V`&4`< !Y`" `<P!A`'8`90` `&\`9 ` `$0`( !)`&X`= !E`'(` M9 !A`&,`90!S`"X`80!S`&0`! !+`'(`:0!S`"X`10`Z`%P`30!I`&,`< !O M`',`;P!F`'0`( !E`'0`8P!<`&T`>0` `&0`;P!C`'4`;0!E`&X`= !S`%P` M`#H`7 !$`&\`8P!U`&T`90!N`'0`<P` `&$`; !D`" `4P!E`'0`= !I`&X` M9P!S`%P`2P!R`&D`<P!<`$$`< !P`&P`:0!C`&$`= !I`&\`; ` `$0`80!T M`&$`7 !-`&D`8P!R`&\`<P!O`&8`= !<`%<`;P!R`&0`7 !!`'4`= !O`%(` M90!C`&\`= !E`'(`>0` `',`80!V`&4`( !O`&8`( !$`" `20!N`'0`90!R M%<8%``'0` 9>A- "8(28_D]*`0!12 $`;R ``0"W\ $````7D `````````` M`&\H``$`;P`!````%Y `````````````: $````````+& ``#X1P"!&$F/X5 MQ 4``7 (!EZ$< A A)C^3TH$`%%*! !O* `!`*?P`0```!>0```````````` M`& !````````"Q ```^$0 L1A)C^%<8%``% "P9>A$ +8(28_D]*`0!12 $` M;R ``0"W\ $````7D ````````````!H`0````````L8```/A! .$828_A7& M!0`!$ X&7H00#F M: $````````+& ``#X3 $!&$F/X5Q 4``> 0!EZ$X!! A)C^3TH$`%%*! !O M* `!`*?P`0```!>0`````````````& !````````"Q ```^$L!,1A)C^%<8% M``&P$P9>A+ 38(28_D]*`0!12 $`;R ``0"W\ $````7D ````````````!H M``$`;P`!````%Y `````````````: $````````+& ``#X10&1&$F/X5Q 4` M`5 9!EZ$4!E A)C^3TH$`%%*! !O* `!`*?P`0```!<0`````````````& ! M````````"Q ```^$T (1A)C^%<8%``'0` 9>A- "8(28_D]*`0!12 $`;R ` M`0"W\ $````7$ ````````````!H`0````````L8```/A* %$828_A7&!0`! MH 4&7H2 !6"$F/Y/2 $`44H!`&\H``$`M_ !`````I(!````````````: $` M````````& ``#X1P"!&$3/\5Q 4``7 (!EZ$< A A$S_` `"`"X``0````"0 M`0```````````& !`````````! ```^$0 L1A)C^%<8%``% "P9>A$ +8(28 M_ (``P`N``$````$D $```````````!H`0`````````8```/A! .$828_A7& M!0`!$ X&7H00#F"$F/X"``0`+ `!`````I(!````````````: $````````` M& ``#X3 $!&$3/\5Q 4``> 0!EZ$X!! A$S_` `%`"X``0````"0`0`````` M`````& !`````````! ```^$L!,1A)C^%<8%``&P$P9>A+ 38(28_ (`! `N M``$````$D $```````````!H`0`````````8```/A( 6$828_A7&!0`! !8& M7H2 %F"$F/X"``<`+ `!`````I(!````````````: $`````````& ``#X10 M&1&$3/\5Q 4``5 9!EZ$4!E A$S_` `(`"X``0````00`0```````````& ! M`````````! ```^$T (1A)C^%<8%``'0` 9>A- "8(28_ (````N``$````$ MD $```````````!H`0`````````8```/A* %$828_A7&!0`!H 4&7H2 !6"$ MF/X"``$`+ `!`````I(!````````````: $`````````& ``#X1P"!&$3/\5 MQ 4``7 (!EZ$< A A$S_` `"`"X``0````"0`0```````````& !```````` M`! ```^$0 L1A)C^%<8%``% "P9>A$ +8(28_ (``P`N``$````$D $````` M``````!H`0`````````8```/A! .$828_A7&!0`!$ X&7H00#F"$F/X"``0` M+ `!`````I(!````````````: $`````````& ``#X3 $!&$3/\5Q 4``> 0 M!EZ$X!! A$S_` `%`"X``0````"0`0```````````& !`````````! ```^$ ML!,1A)C^%<8%``&P$P9>A+ 38(28_ (`! `N``$````$D $```````````!H M`0`````````8```/A( 6$828_A7&!0`! !8&7H2 %F"$F/X"``<`+ `!```` M`I(!````````````: $`````````& ``#X10&1&$3/\5Q 4``5 9!EZ$4!E MA$S_` `(`"X``0````00`0```````````& !`````````! ```^$T (1A)C^ M%<8%``'0` 9>A- "8(28_ (````I``$````$D $```````````!H`0`````` M```8```/A* %$828_A7&!0`!H 4&7H2 !6"$F/X"``$`+ `!`````I(!```` M````````: $`````````& ``#X1P"!&$3/\5Q 4``7 (!EZ$< A A$S_` `" M`"X``0````"0`0```````````& !`````````! ```^$0 L1A)C^%<8%``% M"P9>A$ +8(28_ (``P`N``$````$D $```````````!H`0`````````8```/ MA! .$828_A7&!0`!$ X&7H00#F"$F/X"``0`+ `!`````I(!```````````` M: $`````````& ``#X3 $!&$3/\5Q 4``> 0!EZ$X!! A$S_` `%`"X``0`` M``"0`0```````````& !`````````! ```^$L!,1A)C^%<8%``&P$P9>A+ 3 M8(28_ (`! `N``$````$D $```````````!H`0`````````8```/A( 6$828 M_A7&!0`! !8&7H2 %F"$F/X"``<`+ `!`````I(!````````````: $````` M````& ``#X10&1&$3/\5Q 4``5 9!EZ$4!E A$S_` `(`"X``0`````0`0`` M`````````& !`````````! ```^$T (1A)C^%<8%``'0` 9>A- "8(28_ (` M```N``$````7$ ````````````!H`0````````L8```/A* %$828_A7&!0`! MH 4&7H2 !6"$F/Y/2 $`44H!`&\H``$`M_ !`````I(!````````````: $` M````````& ``#X1P"!&$3/\5Q 4``7 (!EZ$< A A$S_` `"`"X``0````"0 M`0```````````& !`````````! ```^$0 L1A)C^%<8%``% "P9>A$ +8(28 M_ (``P`N``$````$D $```````````!H`0`````````8```/A! .$828_A7& M!0`!$ X&7H00#F"$F/X"``0`+ `!`````I(!````````````: $````````` M& ``#X3 $!&$3/\5Q 4``> 0!EZ$X!! A$S_` `%`"X``0````"0`0`````` M`````& !`````````! ```^$L!,1A)C^%<8%``&P$P9>A+ 38(28_ (`! `N M``$````$D $```````````!H`0`````````8```/A( 6$828_A7&!0`! !8& M7H2 %F"$F/X"``<`+ `!`````I(!````````````: $`````````& ``#X10 M&1&$3/\5Q 4``5 9!EZ$4!E A$S_` `(`"X``0`````0`0```````````& ! M`````````! ```^$T (1A)C^%<8%``'0` 9>A- "8(28_ (````N``$````$ MD $```````````!H`0`````````8```/A* %$828_A7&!0`!H 4&7H2 !6"$ MF/X"``$`+ `!`````I(!````````````: $`````````& ``#X1P"!&$3/\5 MQ 4``7 (!EZ$< A A$S_` `"`"X``0````"0`0```````````& !```````` M`! ```^$0 L1A)C^%<8%``% "P9>A$ +8(28_ (``P`N``$````$D $````` M``````!H`0`````````8```/A! .$828_A7&!0`!$ X&7H00#F"$F/X"``0` M+ `!`````I(!````````````: $`````````& ``#X3 $!&$3/\5Q 4``> 0 M!EZ$X!! A$S_` `%`"X``0````"0`0```````````& !`````````! ```^$ ML!,1A)C^%<8%``&P$P9>A+ 38(28_ (`! `N``$````$D $```````````!H M`0`````````8```/A( 6$828_A7&!0`! !8&7H2 %F"$F/X"``<`+ `!```` M`I(!````````````: $`````````& ``#X10&1&$3/\5Q 4``5 9!EZ$4!E MA$S_` `(`"X`! ```"ADIU\````````````````3>\LI```````````````` MYFHS30```````````````#Q4^ \```````````````"D$ L)```````````` M````?EN-`P```````````````/__________________________________ M! ```````````````````/__! ```!(``0`)! ,`"00%``D$`0`)! ,`"00% M``D$`0`)! ,`"00%``D$$ `!``D$`0`)!!L`"00/``D$&0`)!!L`"00/``D$ M&0`)!!L`"002`!D`"009``D$&P`)! \`"009``D$&P`)! \`"009``D$&P`) M!!(`%P`)!!D`"00;``D$#P`)!!D`"00;``D$#P`)!!D`"00;``D$$ `/``D$ M`0`)!!L`"00/``D$&0`)!!L`"00/``D$&0`)!!L`"002``\`"009``D$&P`) M01 ``$(8``!$& ``1A ``$ 8``!3& ``5! ``%88``!8& ``6A ``&48``!F M``\9```X&0``.1D``#L9```^&0``0!D``&D9``!J&0``;!D``&X9``!P&0`` M& ``)!H``"<:```J& ``*QH``"P:``"D' ```````` ````"`0``` $```(! M```"`0``G $```(!```"`0``` $```(!``">`0``` $```(!```"`0``` $` M`)X!```"`0``` $```(!```"`0``G $```(!```"`0``` $```(!``">`0`` M` $```(!```"`0``` $``)X!```"`0``` $```(!```"`0``G $```(!```" M`0``` $```(!``">`0``` $```(!```"`0``` $``)X!```"`0``` $```(! M```"`0``G $```(!```"`0``` $```(!``">`0``` $```(!```"`0``` $` M`( (`````````/\!````````5 !I`&T`90!S`" `3 !E`'<`( !2`&\`;0!A M`&X````U%I !` `%!0$"`0<&` 4'`````````! ``````````````( ````` M4P!Y`&T`8 !O`&P````S)I !```""P8$` ("` ($AWH`( ```( (```````` M``4`````````````````````$ `````````````` ````!7`&D`; !G`&0` M````; 0``$(9```!``P````$``,0-0```````````````0`!`````0`````` M``#A$ #P$ `````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````(!Z %M "T`(&!<C ``! `&0!D````&0````0?```````````````` M``````````````````````````````````````````".! `````````````` M````````````` ````````````PR U$`\! `" `````````````````````` M`',`( !A`&X`9 ` `%,`90!T`'0`:0!N`&<`<P!<`$L`< !I`',`7 !!`' ` M< !L`&D`8P!A`'0`:0!O`&X`( !$`&$`= !A`%P`30!I`&,`< !O`',`;P!F M`'0`7 !4`&4`;0!P`&P`80!T`&4`<P!<`$X`;P!R`&T`80!L`"X`9 !O`'0` M%P!$`" `20!N`'0`90!R`&8`80!C`&4`<P`Z`" `80!N`" `10!X`' `;P!S M`.D`````````! !+`'(`:0!S``0`2P!R`&D`<P`````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M````````````````_O\```4`` ```````````````````````0```."%G_+Y M3V 0JY$(`"LGL]DP````? $``!$````!````D ````(```"8`````P```+ ` M#P```&0!```0````; $``!,```!T`0``` ```.0$```>````& ```$0 26YT M97)F86-E<SH 86X 17AP;W/I`!X````!`````"!);AX````%````2W)I<P!E M<F8>`````0````!R:7,>`````0````!R:7,>````"P```$YO<FUA;"YD;W0` M="!7;W)D(#DN M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M`````````````````/[_```%``(```````````````````````$````"U<W5 MG"X;$).7" `K+/FN, `````!```,`````0```& ````/````< ````4```!\ M````! ```(0````1````C ```!<```"4````"P```)P````0````I ```!,` M"P`````````+``````````L`````````'A ```$````8````1"!);G1E<F9A M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````!````` ````,````$````!0````8````'````" `` M% ```!4````6````%P```! ````9````& ```!L````<````'0```/[___\? M````( ```"$````B````(P```"0````E````) ```"<````H````*0```"H` M00```/[____]____1 ```/[____^_____O__________________________ M____________________________________________________________ M____________________________________________________________ M____________________________________________________________ M____________________________________________________________ M_________________________________________U(`;P!O`'0`( !%`&X` M= !R`'D````````````````````````````````````````````````````` M``````````````````````````````````````````````````````````X` M```````>````GB<```````!7`&\`< !D`$0`;P!C`'4`;0!E`&X`= `````` M_________P`````````````````````````````````````````````````` M```B. ````````4`4P!U`&T`;0!A`'(`>0!)`&X`9 !O`'(`;0!A`'0`:0!O M````````````````````````````````````````````````, `````0```` M````!0!$`&\`8P!U`&T`90!N`'0`4P!U`&T`;0!A`'(`>0!)`&X`9 !O`'(` M```````````````````````````````````````Z`````! ````````!`$,` M;P!M`' `3P!B`&H````````````````````````````````````````````` M````````````````````$ `"`0$````&````_____P`````````````````` M``````````````````````````````````!J`````````$\`8 !J`&4`8P!T M`% `;P!O`&P````````````````````````````````````````````````` M```````````6``$`________________``````````````````````````! M```````````````````````````````````````````````````````````` M```````````````````````````!````_O__________________________ M____________________________________________________________ M____________________________________________________________ M____________________________________________________________ M____________________________________________________________ M____________________________________________________________ M____________________________________________________________ M____________________________________________________________ M____________________________________________________________ M____________________________________________________________ M____________________________________________________________ M_____P8)` ``````P ```````$88````36EC<F]S;V9T(%=O<F0 1&]C=6UE M;G0`" ```$U35V]R9$1O8P`0````5V]R9"Y$;V-U;65N="XX`/0YLG$````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` M```````````````````````````````````````````````````````````` )```````````` ` end
Apr 07 2004
Would it be possible to post the (simple) example? :o)) Phill. "Kris" <someidiot earthlink.dot.dot.dot.net> wrote in message news:c524gh$1nnm$1 digitaldaemon.com..."Walter" <walter digitalmars.com> wrote in message:illustratesJust to be sure, could you please post a complete example that(whatthe problem, rather than me trying to piece one together? That way, it avoids misunderstandings on my part.Yes, I will send you an example Walter. What I ask in return, and what I feel is *far* more valuable, is for you to please review the attached document and comment on the following suggested items: a) what you agree with as valuable, and what you think is worthless. Both specifically with respect to the D language. b) if there are features in there that are agreeable to you, then whenversion) you would expect them to be fully supported. That document effectively represents an Interface (contract) with respecttothese issues <g>. If you're not prepared to come to the table and discuss, then there's not much else to talk about, is there? If you wish to continue receiving "support" from me, then you truly havetomake certain commitments one way or another. I sincerely hope you findthatagreeable. If, for instance, you don't agree with any of the points made in said document, then I'd simply be wasting my time (and those on this newsgroup) by extending this particular thread, and by sending you further examples.Onthe other hand, receiving widespread free "support", plus a usable code-base, from this NG is surely worth a few solid commitments? Respectfully, - Kris p.s. the attached is the version which differentiates between COMinterfaceand OO Interface, and where the frustration-meter is toned down a little.--- Outgoing mail is certified Virus Free. Checked by AVG anti-virus system (http://www.grisoft.com). Version: 6.0.648 / Virus Database: 415 - Release Date: 3/31/2004
Apr 07 2004