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:
@ -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_;
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user