[sword-devel] search function?
Troy A. Griffitts
scribe at crosswire.org
Thu Sep 30 23:36:17 MST 2004
Kev,
Sure! We'd always love the help. Briefly, (this assumes you
understand the SWModule/SWKey construct in the API) a key has the
concept of a numeric index(). Basically, the current modus opperandi in
SWModule::search is to set the module to the end, check the module's
key->index() and use that as the high value. Then, set the module to
the beginning and start the search. After performing the search for an
individual entry, the key->index() is checked to see where we're at, do
the math, and report the %.
A different way to do this would be to add an SWModule::entryCount(),
use that as the high count, and merely have an int pos that we pos++
while iterating during the search.
You'd need to try to provide a basic impl in SWModule::entryCount and
possibly override with a better method for Bibles in SWText::entryCount
or SWLexDict::entryCount for Bibles, or maybe even make it pure virtual
and force the drivers to supply the information.
The danger to consider is that we are adding the requirement for an
SWModule to be able to calculate the number of entries total in it's
range. This is not the case for many types of keys, e.g. keys for
lexicons.
Keys cannot always do this for the module. A VerseKey for a
canonization probably can do this, so Bibles can likely rely on their
key to report this to them (so your search range in VerseKey could
adjust). But, for a lexicon it's different. A lexicon knows how many
entries it has in it (probably), but the key is merely a StrKey. It is
not SWKey::isTraversible(). The Lexicon is traversable, but the key,
all by itself, is not traversible. To try to be clear:
VerseKey::isTraversible() == true
because it means something to say "John 3:16"++ OUTSIDE of any given Bible.
StrKey::isTraversible() == false
because is does NOT mean something to say "Jerusalem"++ OUTSIDE of any
given module.
Sorry, most of this is just random information. I'd be happy to discuss
or look at any solution you might submit.
-Troy.
Kevin Field wrote:
> Hi Troy,
>
> Ah, that makes sense, as we've always been passing a scope. I guess
> the best thing to do would be to not provide a scope if the scope is
> just going to be the whole Bible anyway. Better yet, could I help get
> that into the Sword library itself? From there I could go to getting
> it working if it's a single range, and then multiple ranges wouldn't be
> too much harder.
>
> Thanks,
>
> Kev
>
>
>>Kev,
>> The status callback mechanism does good in many scenerios, and not
>>so good in others. We hope to improve it. A case where I remember
>>it
>>acting as you have posted is when one provides a search 'scope'. We
>>haven't added the logic to try to figure out the complete domain of
>>the
>>search scope (e.g. "gen-deut;1jn;rev1:1-5:19"). So we don't really
>>have
>>the data to report a %. It's not that it can't be done, but just
>>hasn't
>>been done yet. Hope this helps.
>>
>> -Troy.
>
>
> _______________________________________________
> sword-devel mailing list
> sword-devel at crosswire.org
> http://www.crosswire.org/mailman/listinfo/sword-devel
More information about the sword-devel
mailing list