# HG changeset patch # User Sebastien Jodogne # Date 1376641489 -7200 # Node ID c4122c3a47c19ed16ddd0bb887cbb8897b876c31 # Parent f59e4518fd57fe35727af1cdd623cbc6bdd033d1 access to oldest item in LRUCache diff -r f59e4518fd57 -r c4122c3a47c1 Core/Cache/LeastRecentlyUsedIndex.h --- a/Core/Cache/LeastRecentlyUsedIndex.h Fri Aug 16 10:17:45 2013 +0200 +++ b/Core/Cache/LeastRecentlyUsedIndex.h Fri Aug 16 10:24:49 2013 +0200 @@ -146,6 +146,10 @@ { return index_.empty(); } + + const T& GetOldest() const; + + const Payload& GetOldestPayload() const; }; @@ -247,4 +251,28 @@ return oldest; } + + + template + const T& LeastRecentlyUsedIndex::GetOldest() const + { + if (IsEmpty()) + { + throw OrthancException(ErrorCode_BadSequenceOfCalls); + } + + return queue_.back().first; + } + + + template + const Payload& LeastRecentlyUsedIndex::GetOldestPayload() const + { + if (IsEmpty()) + { + throw OrthancException(ErrorCode_BadSequenceOfCalls); + } + + return queue_.back().second; + } } diff -r f59e4518fd57 -r c4122c3a47c1 UnitTests/MemoryCache.cpp --- a/UnitTests/MemoryCache.cpp Fri Aug 16 10:17:45 2013 +0200 +++ b/UnitTests/MemoryCache.cpp Fri Aug 16 10:24:49 2013 +0200 @@ -24,12 +24,19 @@ r.TagAsMostRecent("d"); r.TagAsMostRecent("c"); + ASSERT_EQ("a", r.GetOldest()); ASSERT_EQ("a", r.RemoveOldest()); + ASSERT_EQ("b", r.GetOldest()); ASSERT_EQ("b", r.RemoveOldest()); + ASSERT_EQ("d", r.GetOldest()); ASSERT_EQ("d", r.RemoveOldest()); + ASSERT_EQ("c", r.GetOldest()); ASSERT_EQ("c", r.RemoveOldest()); ASSERT_TRUE(r.IsEmpty()); + + ASSERT_THROW(r.GetOldest(), Orthanc::OrthancException); + ASSERT_THROW(r.RemoveOldest(), Orthanc::OrthancException); } @@ -58,8 +65,16 @@ ASSERT_TRUE(r.Contains("c", p)); ASSERT_EQ(422, p); ASSERT_TRUE(r.Contains("d", p)); ASSERT_EQ(423, p); + ASSERT_EQ("a", r.GetOldest()); + ASSERT_EQ(420, r.GetOldestPayload()); ASSERT_EQ("a", r.RemoveOldest(p)); ASSERT_EQ(420, p); + + ASSERT_EQ("d", r.GetOldest()); + ASSERT_EQ(423, r.GetOldestPayload()); ASSERT_EQ("d", r.RemoveOldest(p)); ASSERT_EQ(423, p); + + ASSERT_EQ("c", r.GetOldest()); + ASSERT_EQ(422, r.GetOldestPayload()); ASSERT_EQ("c", r.RemoveOldest(p)); ASSERT_EQ(422, p); ASSERT_TRUE(r.IsEmpty());