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_;
|
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:
|
private:
|
||||||
int64_t last_unwrapped_ = 0;
|
int64_t last_unwrapped_ = 0;
|
||||||
absl::optional<T> last_value_;
|
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
|
} // namespace webrtc
|
||||||
|
Reference in New Issue
Block a user