[sword-devel] Fastest way of counting verses
Troy A. Griffitts
scribe at crosswire.org
Thu Mar 12 09:30:49 MST 2009
Thanks Manfred,
I have your previous posts on this one in my inbox still to debug. I
really appreciated the feedback even if I don't always reply right away.
Please don't stop reminding me though.
-Troy.
Manfred Bergmann wrote:
> Hi Troy.
>
> The speed of the library is good but we're producing some overhead for
> display like adding markers to the text in order to synchronize between
> views and such.
> The overall speed is still ok but if the user pulls more books like
> 1-5Mose then it can take 7 - 10 secs.
> However that's for your snippets, I could speed up some things here.
>
> Here is something interesting:
> (a not existing key is used in the examples).
>
> ---------------------------
> sword::VerseKey vk;
> sword::ListKey lk = vk.ParseVerseList("Par.1.1", vk, true);
> lk.Persist(true);
> swModule->setKey(lk);
> for ((*swModule) = sword::TOP; !swModule->Error(); (*swModule)++) {
> // do something
> ...
> }
> --------------------------
> The above crashes at (*swModule) = sword::TOP.
>
> ---------------------------
> sword::VerseKey vk;
> sword::ListKey lk = vk.ParseVerseList("Par.1.1", vk, true);
> //lk.Persist(true);
> swModule->setKey(lk);
> for ((*swModule) = sword::TOP; !swModule->Error(); (*swModule)++) {
> // do something
> ...
> }
> --------------------------
> This doesn't crash but iteration starts at Gen 1.
> Note, Persist() is commented.
>
> --------------------------
> sword::VerseKey vk;
> sword::ListKey lk = vk.ParseVerseList("Par.1.1", vk, true);
> for (lk = sword::TOP; !lk.Error(); lk++) {
> swModule->setKey(lk);
> // do something
> }
> --------------------------
> This produces the correct output - nothing, loop is not entered.
>
>
>
> Regards,
> Manfred
>
> Am 12.03.2009 um 13:19 schrieb Troy A. Griffitts:
>
>> Manfred,
>>
>> Are you specifically asking about how to obtain the ordinal count of a
>> traversable SWKey?
>>
>> If so, the official answer is, "you can't without counting yourself".
>> SWKey's which return true for isTraversible() don't contractually
>> offer their set count. This is fairly common with optimized object
>> containers who's set count is not easily derived (think of linked lists).
>>
>> Having said this, SWKey offers a bookmarking facility with long
>> SWKey::Index(), SWKey::Index(long).
>>
>> The longs can _usually_ be used to practically bound a 'range'.
>>
>> e.g.
>>
>> VerseKey *parser = (VerseKey *)kjv->getKey();
>> ListKey keySet = parser->ParseVerseList("matt-jn", parser, true);
>>
>> keySet = TOP;
>> long start = keySet.Index();
>> keySet = BOTTOM;
>> long end = keySet.Index();
>>
>> progressBar.setStart(start);
>> progressBar.setEnd(end);
>>
>>
>> for (keySet = TOP; !keySet.Error(); keySet++) {
>> progressBar.setValue(keySet.Index());
>> // process text here...
>> }
>>
>>
>> // Having said this, a few points:
>>
>> obvious fail case: "gen; rev22:21"
>>
>> true ordinal count:
>> long i = 0; for (keySet = TOP; !keySet.Error(); keySet++) i++;
>>
>> finally, processing a set of display data should really not take
>> humanly noticeable times on even old desktop computers (or even
>> reasonably recent mobile devices). We've actually, recently been
>> trying to optimize things on mobile devices for SwordReader and as we
>> continue to make improvements for these devices you should see
>> improvements on all platforms. Please let us know with a snippet of
>> code which demonstrates an iteration which takes any noticeable time
>> to complete.
>>
>> -Troy.
>>
>>
>>
>>
>>
>> Manfred Bergmann wrote:
>>> Hi.
>>> Another APi question:
>>> In order to show a progress indicator to not bore the user when the
>>> cursor ball spins and a text pull takes a little longer I want to
>>> know how many verses need to be pulled before actually doing it.
>>> This can be for any reference the user enters, "gen" or "gen 1,6,9"
>>> or anything like that.
>>> What is the fastest way to do that?
>>> Regards,
>>> Manfred
>>> _______________________________________________
>>> sword-devel mailing list: sword-devel at 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 at 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 at crosswire.org
> http://www.crosswire.org/mailman/listinfo/sword-devel
> Instructions to unsubscribe/change your settings at above page
More information about the sword-devel
mailing list