Add UnwrapForward and UnwrapBackwards to SeqNumUnwrapper.

Bug: webrtc:12979
Change-Id: I4c3b3f5e1ff70ae528cfd73a34baafc75cccf481
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/226462
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Philip Eliasson <philipel@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#34505}
This commit is contained in:
philipel
2021-07-19 15:40:17 +02:00
committed by WebRTC LUCI CQ
parent 99a71f49c0
commit 8ab87e41a1
2 changed files with 50 additions and 0 deletions

View File

@ -109,6 +109,28 @@ class SeqNumUnwrapper {
return last_unwrapped_;
}
int64_t UnwrapForward(T value) {
if (!last_value_) {
last_unwrapped_ = {value};
} else {
last_unwrapped_ += ForwardDiff<T, M>(*last_value_, value);
}
last_value_ = value;
return last_unwrapped_;
}
int64_t UnwrapBackwards(T value) {
if (!last_value_) {
last_unwrapped_ = {value};
} else {
last_unwrapped_ -= ReverseDiff<T, M>(*last_value_, value);
}
last_value_ = value;
return last_unwrapped_;
}
private:
int64_t last_unwrapped_ = 0;
absl::optional<T> last_value_;

View File

@ -303,4 +303,32 @@ TEST(SeqNumUnwrapper, ManyBackwardWraps) {
}
}
TEST(SeqNumUnwrapper, UnwrapForward) {
SeqNumUnwrapper<uint8_t> unwrapper;
EXPECT_EQ(255, unwrapper.Unwrap(255));
EXPECT_EQ(256, unwrapper.UnwrapForward(0));
EXPECT_EQ(511, unwrapper.UnwrapForward(255));
}
TEST(SeqNumUnwrapper, UnwrapForwardWithDivisor) {
SeqNumUnwrapper<uint8_t, 33> unwrapper;
EXPECT_EQ(30, unwrapper.UnwrapForward(30));
EXPECT_EQ(36, unwrapper.UnwrapForward(3));
EXPECT_EQ(63, unwrapper.UnwrapForward(30));
}
TEST(SeqNumUnwrapper, UnwrapBackwards) {
SeqNumUnwrapper<uint8_t> unwrapper;
EXPECT_EQ(0, unwrapper.UnwrapBackwards(0));
EXPECT_EQ(-2, unwrapper.UnwrapBackwards(254));
EXPECT_EQ(-256, unwrapper.UnwrapBackwards(0));
}
TEST(SeqNumUnwrapper, UnwrapBackwardsWithDivisor) {
SeqNumUnwrapper<uint8_t, 33> unwrapper;
EXPECT_EQ(0, unwrapper.Unwrap(0));
EXPECT_EQ(-2, unwrapper.UnwrapBackwards(31));
EXPECT_EQ(-33, unwrapper.UnwrapBackwards(0));
}
} // namespace webrtc