<div dir="ltr">And Bible tends to get lists of books and then store the relevant Book object. I can't find anywhere that it asks for a book by name but it does use initials sometimes.<div><br></div><div>I recall there was a problem a few months ago in which KJVA had the same name as KJV but different initials and use of the name as the id, instead of the initials, caused problems - a fix had to be implemented then. There were some similar cases of same name/different initials in the IBT repo.</div>
<div><br></div><div>AB should be fine/faster if JSword matches by initials first rather than name - if that is what you are intending.</div><div><br></div><div>I am hoping to settle on a stable build of JSword soon to prepare for an AB release. When do you think would be a good time. It would be good to get it labelled too. The only outstanding issue is with 'zerosUnmapped' but I could just remove that line from the properties files for AB if a fix is not easy. Currently I just catch the exception and force the verse to the required v11n.</div>
<div><br></div><div>Martin</div><div><br></div><div>Martin</div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On 25 January 2014 21:41, Chris Burrell <span dir="ltr"><<a href="mailto:chris@burrell.me.uk" target="_blank">chris@burrell.me.uk</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi<div><br></div><div>I'm looking to refactor Books.installed().getBook(name) because it takes too long when you need to look up books multiple times (and don't have an easy way of caching the JSword lookup). It's particular slow when you have 200+ resources (our server will have). This will also be more prevalent in Android where method calls are quite expensive.</div>
<div><br></div><div>In STEP we always have the initials of the module (the user selects by name/initials/STEP name in the browser, where it always gets translated to initials well before it hits JSword). Do any other frontends use the getBook(name) by name?</div>
<div><br></div><div>I want to at least provide way of getting the book directly from its initials. As part of this, we can several things:</div><div><br></div><div>In Books:</div><div>- refactor the getBook() method to not search first against the name, then against name insensitive and then against the initials in the BMD, and then against the initials directly</div>
<div>- If the above is not possible then at least provide a getBookByInitials (which would just look up the initials against their lower case value.</div><div><br></div><div>In BookSet:</div><div>- I can't work out why we're sorting the inserts in add(). They cause unecessary copies of the ArrayList contents in the creation of it.</div>
<div>- I can't work out why it also implements Set. Especially, since contains would be a good candidate for using </div><div><br></div><div><br></div><div>So there are two options really:</div><div>- change BookSet to be based on a Map. getBooksByInitials would use the map directly. getBook would iterate through the contents (or key the contents in a separate map for faster access)</div>
<div>- Add a map to BookSet to cache the lookups</div><div><br></div><div>My preference would be to replace the BookSet implementation altogether. But the easy option would be to have a Map lookup. Do we use any of the Set<> methods? Would it make sense to replace BookSet with a LinkedHashMap?</div>
<span class="HOEnZb"><font color="#888888">
<div><br></div><div><br></div><div>Chris</div><div><br></div></font></span></div>
<br>_______________________________________________<br>
jsword-devel mailing list<br>
<a href="mailto:jsword-devel@crosswire.org">jsword-devel@crosswire.org</a><br>
<a href="http://www.crosswire.org/mailman/listinfo/jsword-devel" target="_blank">http://www.crosswire.org/mailman/listinfo/jsword-devel</a><br>
<br></blockquote></div><br></div>