package net.bible.android.view.activity.page; import java.util.HashSet; import java.util.Set; /** * Handle verse selection logic. * * @author Martin Denham [mjdenham at gmail dot com] * @see gnu.lgpl.License for license details.<br> * The copyright to this program is held by it's author. */ public class VerseNoRange { private int startVerseNo; private int endVerseNo; private static final int NO_SELECTION = -1; public VerseNoRange(int startVerseNo) { this.startVerseNo = startVerseNo; this.endVerseNo = startVerseNo; } public VerseNoRange(int startVerseNo, int endVerseNo) { this.startVerseNo = startVerseNo; this.endVerseNo = endVerseNo; } public VerseNoRange clone() { return new VerseNoRange(startVerseNo, endVerseNo); } public void alter(int verse) { if (verse>endVerseNo) { endVerseNo = verse; } else if (verse<startVerseNo) { startVerseNo = verse; } else if (verse>startVerseNo) { endVerseNo = verse-1; } else if (verse==startVerseNo && startVerseNo==endVerseNo) { startVerseNo = NO_SELECTION; endVerseNo = NO_SELECTION; } else if (verse==startVerseNo) { startVerseNo++; } } public Set<Integer> getExtrasIn(VerseNoRange other) { Set<Integer> extras = new HashSet<>(); for (int i=other.startVerseNo; i<=other.endVerseNo; i++) { if (!contains(i)) { extras.add(i); } } return extras; } public boolean contains(int verseNo) { return verseNo>=startVerseNo && verseNo<=endVerseNo; } private Set<Integer> getVerseSet() { Set<Integer> verses = new HashSet<>(); for (int i=startVerseNo; i<=endVerseNo; i++) { verses.add(i); } return verses; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; VerseNoRange that = (VerseNoRange) o; if (startVerseNo != that.startVerseNo) return false; return endVerseNo == that.endVerseNo; } @Override public int hashCode() { int result = startVerseNo; result = 31 * result + endVerseNo; return result; } public int getStartVerseNo() { return startVerseNo; } public int getEndVerseNo() { return endVerseNo; } public boolean isEmpty() { return startVerseNo==-1 || endVerseNo==-1; } }