<div dir="ltr">And Bible tends to get lists of books and then store the relevant Book object.  I can&#39;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 &#39;zerosUnmapped&#39; 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">&lt;<a href="mailto:chris@burrell.me.uk" target="_blank">chris@burrell.me.uk</a>&gt;</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&#39;m looking to refactor Books.installed().getBook(name) because it takes too long when you need to look up books multiple times (and don&#39;t have an easy way of caching the JSword lookup). It&#39;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&#39;t work out why we&#39;re sorting the inserts in add(). They cause unecessary copies of the ArrayList contents in the creation of it.</div>

<div>- I can&#39;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&lt;&gt; 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>