diff --git a/include/zim/entry.h b/include/zim/entry.h index a3e72e7d2..6944aa6a3 100644 --- a/include/zim/entry.h +++ b/include/zim/entry.h @@ -69,10 +69,18 @@ namespace zim /** Get the Entry targeted by the entry. * * @return The entry directly targeted by this redirect entry. - * @exception InvalidEntry in the entry is not a redirection. + * @exception InvalidEntry if the entry is not a redirection. */ Entry getRedirectEntry() const; + /** Get the index of the Entry targeted by the entry. + * + * @return The index of the entry directly targeted by this redirect + * entry. + * @exception InvalidEntry if the entry is not a redirection. + */ + entry_index_type getRedirectEntryIndex() const; + entry_index_type getIndex() const { return m_idx; } private: diff --git a/src/entry.cpp b/src/entry.cpp index b469c833e..717d45e9a 100644 --- a/src/entry.cpp +++ b/src/entry.cpp @@ -80,11 +80,15 @@ Item Entry::getRedirect() const { return nextEntry.getItem(false); } -Entry Entry::getRedirectEntry() const { +entry_index_type Entry::getRedirectEntryIndex() const { if (!isRedirect()) { std::ostringstream sstream; sstream << "Entry " << getPath() << " is not a redirect entry."; throw InvalidType(sstream.str()); } - return Entry(m_file, static_cast(m_dirent->getRedirectIndex())); + return m_dirent->getRedirectIndex().v; +} + +Entry Entry::getRedirectEntry() const { + return Entry(m_file, getRedirectEntryIndex()); } diff --git a/test/archive.cpp b/test/archive.cpp index 933170010..0a7123f15 100644 --- a/test/archive.cpp +++ b/test/archive.cpp @@ -204,6 +204,8 @@ TEST(ZimArchive, openCreatedArchive) ASSERT_EQ(foo.getPath(), "foo"); ASSERT_EQ(foo.getTitle(), "Foo"); ASSERT_EQ(std::string(foo.getItem().getData()), "FooContent"); + ASSERT_THROW(foo.getRedirectEntry(), zim::InvalidType); + ASSERT_THROW(foo.getRedirectEntryIndex(), zim::InvalidType); auto foo2 = archive.getEntryByPath("foo2"); ASSERT_EQ(foo2.getPath(), "foo2"); @@ -215,10 +217,12 @@ TEST(ZimArchive, openCreatedArchive) ASSERT_EQ(foo3.getTitle(), "FooRedirection"); ASSERT_TRUE(foo3.isRedirect()); ASSERT_EQ(foo3.getRedirectEntry().getIndex(), foo.getIndex()); + ASSERT_EQ(foo3.getRedirectEntryIndex(), foo.getIndex()); auto main = archive.getMainEntry(); ASSERT_TRUE(main.isRedirect()); ASSERT_EQ(main.getRedirectEntry().getIndex(), foo.getIndex()); + ASSERT_EQ(main.getRedirectEntryIndex(), foo.getIndex()); ASSERT_EQ(archive.getMainEntryIndex(), main.getIndex()); }