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