Hello Troy. That helped, yes.
So for the example without a persistent key the iteration is still in the key but the key has to be set to the module each time before the call to RenderText(). I thought the use case is the same for both persist and no persist because mod++ actually internally calls key.increment() if I'm not mistaken and also sets error so that key.Error() is reflected by mod.Error(). But the two don't seem to be the same. I would say that the second approach is the more expensive one because the key is copied each time with all it's properties? Regards, Manfred Am 26.02.2010 um 17:13 schrieb Troy A. Griffitts: > Dear Manfred, What I think you are getting at, is, given: > > ListKey verses = VerseKey().ParseVerseList("Gen 1:1;4:5-8"); > > What is the difference between: > > ---------------------- > verses.Persist(true); > mod.setKey(verses); > for (mod == TOP; !mod.Error(); mod++) { > cout << mod.RenderText(); > } > ====================== > for (verses = TOP; !verses.Error(); verses++) { > mod.setKey(verses); > cout << mod.RenderText(); > } > ++++++++++++++++++++++ > > and I think you'll find not too much. I believe the reason you were seeing > undesired results and a slower speed was because in your second example, you > were initializing mod to Gen.1.1 and incrementing until you reached Gen.4.8, > Your first example should iterate 5 verses. Your second example should > iterate over a thousand verses. I believe the two examples I've listed above > compare apples to apples when it comes to persistent vs. non-persistent keys, > and both should only iterated the 5 verses in your parse string. > > Hope this helps. > > Troy > > > > > > Manfred Bergmann wrote: >> Hi. >> Again a SWORD API question. >> I'm trying to optimise memory usage and speed issues. >> At the moment I believe the API or better SWModule SWKey usage in MacSword >> is not as good as it could be. >> Now while improving that I came across one or two questions. >> First the following code (all code is in Objective-C syntax but is almost an >> equivalent to the C++ API): >> --------------- >> - (void)testLoopWithModulePosWithDiverseReference { >> SwordListKey *lk = [SwordListKey listKeyWithRef:@"gen 1:1;4:5-8" >> v11n:[mod versification]]; >> [lk setPersist:YES]; >> [mod setKey:lk]; >> NSString *ref = nil; >> NSString *rendered = nil; >> while(![mod error]) { >> ref = [lk keyText]; >> rendered = [mod renderedText]; >> NSLog(@"%@:%@", ref, rendered); >> [mod incKeyPosition]; >> } >> } >> --------------- >> This code works and is pretty fast. >> The output are only verses as in the reference. That's how it should be. The >> module only keeps a reference to the key. >> This example: >> --------------- >> - (void)testLoopWithModulePosNoPersistWithDiverseReference { >> SwordListKey *lk = [SwordListKey listKeyWithRef:@"gen 1:1;4:5-8" >> v11n:[mod versification]]; >> [lk setPosition:BOTTOM]; >> SwordVerseKey *bot = [SwordVerseKey verseKeyWithRef:[lk keyText] >> v11n:[mod versification]]; >> [lk setPosition:TOP]; >> [lk setPersist:NO]; >> [mod setKey:lk]; >> NSString *ref = nil; >> NSString *rendered = nil; >> while(![mod error] && ([(SwordVerseKey *)[mod getKey] index] <= [bot >> index])) { >> ref = [[mod getKey] keyText]; >> rendered = [mod renderedText]; >> NSLog(@"%@:%@", ref, rendered); >> [mod incKeyPosition]; >> } >> } >> --------------- >> This version however renders all verses from gen 1:1 to gen 4:8. >> The only difference is that the module keeps it's own copy of the key. >> The boundary check "![mod error]" doesn't work here so I added the index >> check mainly because I didn't know otherwise. >> How does this loop work with a none persistent key? >> Thanks, >> Manfred >> _______________________________________________ >> sword-devel mailing list: sword-devel@crosswire.org >> http://www.crosswire.org/mailman/listinfo/sword-devel >> Instructions to unsubscribe/change your settings at above > > > _______________________________________________ > sword-devel mailing list: sword-devel@crosswire.org > http://www.crosswire.org/mailman/listinfo/sword-devel > Instructions to unsubscribe/change your settings at above page _______________________________________________ sword-devel mailing list: sword-devel@crosswire.org http://www.crosswire.org/mailman/listinfo/sword-devel Instructions to unsubscribe/change your settings at above page