[sword-devel] Counting Keys in a Module
DM Smith
dmsmith555 at yahoo.com
Mon Apr 21 15:48:34 MST 2008
Correction to my post. I should have said idx not dat.
On Apr 21, 2008, at 4:09 PM, DM Smith wrote:
> Troy A. Griffitts wrote:
>> Theoretically, it is not always a good thing for a container object
>> to
>> provide a count method. The problem is more easily seen when
>> thinking
>> about a tree container. A count method can traverse the tree to
>> sum all
>> nodes, but typically there is no efficient way to obtain this
>> information-- without storing 'accounting' information about the
>> container, and this has the danger of getting out of sync.
>>
>> In any case, can you provide the use case for needing the count of
>> entries in a module? Maybe we can think of an alternative route.
>> One
>> place we've needed them is for providing search status %
>> information in
>> the status update callback. We can't determine the % if we don't
>> know
>> the total count of entries.
>>
> The performance improvement that I got for JSword on the display of
> the
> dictionaries was due in part to knowing the number of entries in a
> dictionary.
>
> Many modern GUIs have a list widget that does not need to be fully
> populated but merely need to know how to get the rows by index it
> needs
> to display. These also need a total size in order to make the
> scrollbar
> work. If I recall correctly, GnomeSword has a performance problem with
> dictionaries and this might help that.
>
> For a dictionary, one can take the size of the dat file and divide
> it by
> the size of a dat file entry to determine the number of dictionary
> entries. I looked to see if there were any way for a dictionary to
> have
> dat entries that did not point to a valid place and I did not find
> any.
> It looks like the strict ordering of the keys requires this to work. I
> tested this against all the dictionary modules at CrossWire and this
> is
> true for them.
>
> In Him,
> DM
>> We can always provide a brute force count method in SWModule with
>> something like:
>>
>> long SWModule::entryCount() {
>> SWKey *saveKey = getKey().clone();
>> long count = 0;
>> for (*this = TOP; !this->Error(); (*this)++)
>> count++;
>> setKey(saveKey);
>> delete saveKey;
>> return count;
>> }
>>
>>
>>
>> mmital wrote:
>>
>>> Hello,
>>>
>>> I was just wondering if you managed to solve your problem. I had
>>> the same
>>> question. Thanks,
>>>
>>>
>>> Jeremy Erickson wrote:
>>>
>>>> Hi,
>>>> What is the proper way in Sword to quickly determine the number
>>>> of keys
>>>> in a
>>>> module? Currently in BibleTime we use the following code to
>>>> determine the
>>>> starting and ending indices:
>>>>
>>>> *m_module = sword::TOP;
>>>> unsigned long verseLowIndex = m_module->Index();
>>>> *m_module = sword::BOTTOM;
>>>> unsigned long verseHighIndex = m_module->Index();
>>>>
>>>> This code works as expected when the module is a Bible, but it
>>>> does not
>>>> work
>>>> when the module is a Lexicon. In this case, the Index() function
>>>> always
>>>> returns 0. Is this because StrKey does not reimplement the Index()
>>>> function?
>>>> In any case, what would the cleanest way for me to count the keys
>>>> in a
>>>> module
>>>> be, so that it works with all types of modules?
>>>>
>>>> -Jeremy Erickson
>
>
> _______________________________________________
> 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