[sword-devel] search function?

Troy A. Griffitts scribe at crosswire.org
Thu Sep 30 23:36:17 MST 2004

	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 

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.


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
>> 	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 
>>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 
>>search scope (e.g. "gen-deut;1jn;rev1:1-5:19").  So we don't really 
>>the data to report a %.  It's not that it can't be done, but just 
>>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