Skip to content

Commit

Permalink
Whenever adding ranges to BfoxVerseList, the ranges are guaranteed va…
Browse files Browse the repository at this point in the history
…lid Bible references
  • Loading branch information
rvenable committed Feb 9, 2011
1 parent 904391c commit 7af5b93
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 12 deletions.
16 changes: 6 additions & 10 deletions BfoxRef/BfoxVerseList.mm
Expand Up @@ -47,11 +47,9 @@ - (void)addVerseList:(BfoxVerseList *)verseList {
#pragma mark Add verses manually (mainly used by BfoxRefParser)

- (void)addVersesFromBook:(BfoxBook)book1 toBook:(BfoxBook)book2 {
Bfox::Range range;
range.first = verse_list->create_first_verse_index(book1, BfoxFirstChapterForFullBook, BfoxFirstVerseForFullChapter);
range.last = verse_list->create_last_verse_index(book2, BfoxLastChapterForFullBook, BfoxLastVerseForFullChapter);

verse_list->add_range(range, false);
verse_list->add_verse_range(book1, BfoxFirstChapterForFullBook, BfoxFirstVerseForFullChapter,
book2, BfoxLastChapterForFullBook, BfoxLastVerseForFullChapter,
false);
}

- (void)addVersesForFullBook:(BfoxBook)book {
Expand Down Expand Up @@ -80,11 +78,9 @@ - (void)addVersesFromChapter:(BfoxChapter)chapter1 verse:(BfoxVerse)verse1 toCha
}

- (void)addVerseRangeForBook:(BfoxBook)book fromChapter:(BfoxChapter)chapter1 verse:(BfoxVerse)verse1 toChapter:(BfoxChapter)chapter2 verse:(BfoxVerse)verse2 {
Bfox::Range range;
range.first = verse_list->create_first_verse_index(book, chapter1, verse1);
range.last = verse_list->create_last_verse_index(book, chapter2, verse2);

verse_list->add_range(range, false);
verse_list->add_verse_range(book, chapter1, verse1,
book, chapter2, verse2,
false);
}

- (Boolean)hasVerses {
Expand Down
2 changes: 1 addition & 1 deletion BfoxRef/cpp/bfox_range_list.h
Expand Up @@ -24,7 +24,7 @@ namespace Bfox {
std::list<Range> ranges;
virtual RangeList *new_list() { return new RangeList(); };
bool empty() { return ranges.empty(); };
bool add_range(Range range, bool test_only);
virtual bool add_range(Range range, bool test_only);
bool add_range_list(RangeList *new_range_list, bool test_only);
std::list<RangeList *> cut_at_range_borders(unsigned int range_size, unsigned int range_offset);
};
Expand Down
25 changes: 24 additions & 1 deletion BfoxRef/cpp/bfox_verse_list.cpp
Expand Up @@ -11,6 +11,24 @@
#include "bfox_book_meta.h"
#include <sstream>

bool Bfox::VerseList::add_range(Bfox::Range range, bool test_only = false) {
return this->add_verse_range(BfoxBookForVerseIndex(range.first), BfoxChapterForVerseIndex(range.first), BfoxVerseForVerseIndex(range.first),
BfoxBookForVerseIndex(range.last), BfoxChapterForVerseIndex(range.last), BfoxVerseForVerseIndex(range.last),
test_only);
}

bool Bfox::VerseList::add_verse_range(BfoxBook book1, BfoxChapter chapter1, BfoxVerse verse1,
BfoxBook book2, BfoxChapter chapter2, BfoxVerse verse2,
bool test_only = false) {
Bfox::Range range;
range.first = this->create_first_verse_index(book1, chapter1, verse1);
range.last = this->create_last_verse_index(book2, chapter2, verse2);

if (range.first == BfoxVerseIndexNotSet || range.last == BfoxVerseIndexNotSet) return false;

return Bfox::RangeList::add_range(range, test_only);
}

BfoxVerseIndex Bfox::VerseList::create_first_verse_index(BfoxBook book1, BfoxChapter chapter1, BfoxVerse verse1) {
/*
* Maximize bible reference before we actually add them to the sequence list
Expand All @@ -32,7 +50,7 @@ BfoxVerseIndex Bfox::VerseList::create_first_verse_index(BfoxBook book1, BfoxCha
}

// If the start chapter is greater than the last chapter of the book, this isn't a valid sequence
if (chapter1 > BfoxLastChapterInBook(book1)) {
if (BfoxLastBookInBible < book1 || BfoxLastChapterInBook(book1) < chapter1 || BfoxLastVerseInChapter(book1, chapter1) < verse1) {
return BfoxVerseIndexNotSet;
}

Expand All @@ -53,6 +71,11 @@ BfoxVerseIndex Bfox::VerseList::create_last_verse_index(BfoxBook book2, BfoxChap
if ((BfoxLastVerseForFullChapter == verse2) && (chapter2 >= BfoxLastChapterInBook(book2)))
chapter2 = BfoxLastChapterForFullBook;

// If the start chapter is greater than the last chapter of the book, this isn't a valid sequence
if (BfoxFirstBookInBible > book2 || BfoxFirstChapterInBook > chapter2 || BfoxFirstVerseInChapter > verse2) {
return BfoxVerseIndexNotSet;
}

return BfoxVerseIndexForBCV(book2, chapter2, verse2);
}

Expand Down
4 changes: 4 additions & 0 deletions BfoxRef/cpp/bfox_verse_list.h
Expand Up @@ -18,6 +18,10 @@ namespace Bfox {
class VerseList : public RangeList {
public:
virtual RangeList *new_list() { return new VerseList(); };
virtual bool add_range(Range range, bool test_only);
bool add_verse_range(BfoxBook book1, BfoxChapter chapter1, BfoxVerse verse1,
BfoxBook book2, BfoxChapter chapter2, BfoxVerse verse2,
bool test_only);
BfoxVerseIndex create_first_verse_index(BfoxBook book1, BfoxChapter chapter1, BfoxVerse verse1);
BfoxVerseIndex create_last_verse_index(BfoxBook book2, BfoxChapter chapter2, BfoxVerse verse2);
std::string number_string_for_first_book(const char *separate_chapters_str,
Expand Down

0 comments on commit 7af5b93

Please sign in to comment.