[sword-devel] Feature Complete Perl Interface

Troy A. Griffitts sword-devel@crosswire.org
Sat, 21 Jul 2001 16:54:38 -0700

> Oh, while we're at it, I think I've found a bug (though I could be just
> doing something wrong.  The software does not seem to be able to compare
> verses from books 32 and above (Jonah and above in the Old Testament).
> Specifically, given the following code:
> int VerseIterator::_verse_greater(char * verse1, char * verse2) {
>         if(module->SetKey(verse1)) {
>                 return -1;
>         }
>         SWKey key1 = module->Key();
>         if(module->SetKey(verse2)) {
>                 return -1;
>         }
>         SWKey key2 = module->Key();
>         return key1 > key2;
> }
> The following results occur:
> _verse_greater("James 3:4", "Malachi 4:5"); FALSE
> _verse_greater("James 3:4", "Obadiah 12:21"); TRUE
> _verse_greater("James 3:4", "Jonah 1:1"); FALSE

	This may sound weird, but you may be doing something illegal.  The
module->SetKey method sets the module's key to a new internal VerseKey
(assuming it's a Bible text).  You then grab a reference to the
modules's key.  After this you, again, reset the module's key to a new
value.  What your initial reference is pointing to is undefined.  It may
be deallocated.  It may be the same internal key reset to the new value.

Am I making sense?  You may:

SWKey *key1 = module->Key().clone();


SWKey *key1 = module->CreateKey();
*key1 = verse1;

either way, you'll need to delete key1 before you return from the

	Hope this helps,

PS.  Please let us know if there is still a comparison bug.